资源

电价(发电)(mpex15)

/***************************************************************//*                                                             *//*S A S S A M P L E L I B R A R Y*//*                                                             *//*名称:mpex15*//*标题:电价(发电)(mpex15)*//*产品:或*//*系统:所有*//*程序:OPTMODEL*//*数据:*//*                                                             *//*支持:更新:*//*参考编号:*//*MISC:数学编程示例15*//*示例手册*//*                                                             *//***************************************************************/数据周期数据;输入长度需求;数据线;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;%设储备=0.15;过程操作模型;设置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];最小总成本=sum{PERIODS中的period,在TYPES中键入}(unit_cost[type]*长度[period]*NumWorking[period,type]+excess_cost[类型]*长度[周期]*超额[周期,类型]+startup_cost[type]*NumStartup[period,type]);con Demand_con{时段}:sum{type in TYPES}输出[period,type]>=需求[周期];con Reserve_con{时段}:sum{type in TYPES}max_level〔type〕*NumWorking〔period,type〕>=(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[卡片(周期),类型]);解决;打印NumWorking NumStartup Excess Output;从[period type]NumWorking NumStartup Excess Output创建数据sol_data;修复NumWorking;修复NumStartup;用LP松弛法求解;打印NumWorking NumStartup Excess Output;打印{PERIODS}中的句点(demand_con[period].dubal/length[period_]);unfix NumWorking;unfix NumStartup;用LP松弛法求解;打印NumWorking NumStartup Excess Output;打印{PERIODS}中的句点(demand_con[period].dubal/length[period_]);打印{PERIODS}中的句点(reserve_con[period].dubal/length[period_]);退出;