资源

水力发电(mpex16)

/***************************************************************//*                                                             *//*S A S S A M P L E L I B R A R Y*//*                                                             *//*名称:mpex16*//*标题:水力发电(mpex16)*//*产品:或*//*系统:所有*//*程序:OPTMODEL*//*数据:*//*                                                             *//*支持:更新:*//*参考编号:*//*MISC:数学规划示例16*//*示例手册*//*                                                             *//***************************************************************/数据周期数据;输入长度需求;数据线;6 150003 300006 250003 400006 27000;数据类型data;输入num_availmin_level max_levelunit_cost excess_cost startup_cost;数据线;12  850 2000 1000 2    200010 1250 1750 2600 1.30 10005 1500 4000 3000 3 500;数据水文数据;输入水电$level unit_cost depth_rate startup_cost;数据线;A 900 90 0.31 1500乙1400 150 0.47 1200;%设储备=0.15;%设min_depth=15;%设max_depth=20;%设午夜深度=16;%设meters_per_mwh=1/3000;过程操作模型;设置PERIODS;num长度{周期};num需求{PERIODS};将数据period_data读入PERIODS=[_N_]长度需求;设置TYPES;num num_avail{TYPES};num最小级别{TYPES};num最大级别{TYPES};num unit_cost{TYPES};num excess_cost{TYPES};num startup_cost{TYPES};将数据type_data读入TYPES=[_N_]num_availmin_level最大级别单元成本超出成本启动成本;var NumWorking{PERIODS,在TYPES}中键入>=0<=num_avail[type]integer;var过剩{周期,类型}>=0;var NumStartup{PERIODS,在TYPES}中键入>=0;impvar输出{PERIODS中的period,在TYPES}中键入=min_level[type]*NumWorking[period,type]+Excess[periode,type];设置<str>HYDROS;num水位{HYDROS};num hydro_unit_cost{HYDROS};num hydro_depth_rate{HYDROS};num hydro_startup_cost{HYDROS};将数据hydro_data读取到HYDROS=[hydro]hydro_level=水位hydro_单位_成本=单位_成本hydro_depth_rate=深度_比率hydro_startup_cost=启动成本;var HydroNumWorking{PERIODS,HYDROS}二进制;var HydroNumStartup{PERIODS,HYDROS}二进制;var深度{周期}>=&min_Depth<=&max_Depth;修复深度[1]=&midnight_Depth;var泵{PERIODS}>=0;impvar水力输出{周期中的周期,水力中的水力}=hydro_level[hydro]*HydroNum工作[period,hydro];最小总成本=sum{PERIODS中的period,在TYPES中键入}(unit_cost[type]*长度[period]*NumWorking[period,type]+excess_cost[类型]*长度[周期]*超额[周期,类型]+startup_cost[type]*NumStartup[period,type])+总和{周期中的周期,水力中的水力}(水力单位成本[水力]*长度[周期]*HydroNumWorking[周期,水力]+hydro_startup_cost[hydro]*HydroNumStartup[period,hydro]);con Demand_con{时段}:sum{type in TYPES}输出[period,type]+总和{HYDROS中的水力}水力输出[周期,水力]-泵[周期]>=需求[周期];con Reserve_con{时段}:sum{type in TYPES}max_level〔type〕*NumWorking〔period,type〕+总和{HYDROS中的hydro}hydro_level*HydroNumWorking[周期,水力].ub>=(1+&储备)*需求[周期];con Excess_ub{周期中的句点,在TYPES}中键入:超额[期间,类型]<=(max_level[type]-min_level[type])*工作次数[period,type];con Startup_con{period in PERIODS,键入TYPES}:启动次数[period,type]>=NumWorking[周期,类型]-(如果周期中的周期为-1,则NumWorking[周期-1,类型]else NumWorking[卡片(周期),类型]);con Hydro_startup_con{周期,水文}:HydroNumStartup[周期,水力]>=HydroNum工作[period,hydro]-(如果周期为-1,则HydroNumWorking[周期-1,hydro]其他HydroNumWorking[卡(周期),hydro]);con深度con{周期中的周期}:(如果PERIODS中的句点+1,则深度[period+1],否则深度[1])=深度[周期]+&meters_per_mwh*长度[周期]*泵[周期]-总和{HYDROS中的hydro}hydro_depth_rate[hydro]*长度[period]*HydroNumWorking[周期,水力];解决;打印NumWorking NumStartup Excess Output;打印HydroNum工作HydroNum启动HydroOutput;打印泵深度;从[period type]创建数据sol_data1Num Working Num启动过量输出;从[period hydro]创建数据sol_data2HydroNum工作Hydronum启动HydroOutput;从[period]Pump Depth创建数据sol_data3;退出;