资源

租车1(mpex25)

/***************************************************************//*                                                             *//*S A S S A M P L E L I B R A R Y*//*                                                             *//*名称:mpex25*//*标题:租车1(mpex25)*//*产品:或*//*系统:所有*//*关键字:或*//*程序:OPTMODEL*//*数据:*//*                                                             *//*支持:更新:*//*参考编号:*//*MISC:数学编程示例25*//*示例手册*//*                                                             *//***************************************************************/数据depot_data;输入仓库$10。;数据线;格拉斯哥曼彻斯特伯明翰普利茅斯;数据需求数据;输入日$10。格拉斯哥-曼彻斯特-伯明翰-普利茅斯;数据线;星期一100 250 95 160星期二150 143 195 99星期三135 80 242 55星期四83 225 111 96星期五120 210 70 115星期六230 98 124 80;数据长度数据;输入长度prob cost price_same price_diff;数据线;1 0.55 20  50  702 0.20 25 70 1003 0.25 30 120 150;数据传输prob_data;输入i$10。格拉斯哥-曼彻斯特-伯明翰-普利茅斯;数据线;格拉斯哥60 20 10 10曼彻斯特15 55 25 5伯明翰15 20 54 11普利茅斯8 12 27 53;数据传输成本数据;输入i$10。格拉斯哥-曼彻斯特-伯明翰-普利茅斯;数据线;格拉斯哥。20 30 50曼彻斯特20。15 35伯明翰30 15。25普利茅斯50 35 25。;数据修复数据;输入仓库$10。修复能力;数据线;曼彻斯特12伯明翰20;%让opportunity_cost_per_week=15;%设transfer_length=1;%设repair_length=1;%设damage_prob=0.10;%设damage_charge=100;%设saturday_discount=20;过程操作模型;设置<str>DEPOTS;将数据depot_data读取到DEPOTS=[depot];设置天数;str day_name{DAYS};需求数量{DEPOTS,DAYS};将数据demand_data读入DAYS=[_N_];num num_days=卡(天数);天数=0..num_DAYS-1;将数据demand_data读入[_N_]{DEPOTS中的仓库}<需求[仓库,_N_-1]=col(仓库)>;设置长度;num length_prob{LENGTHS};num成本{LENGTHS};num价格名称{LENGTHS};num price_diff{LENGTHS};将数据length_data读入LENGTHS=[length]length_prob=近似成本价格相同价格diff;num transition_prob{DEPOTS,DEPOTS};将数据transition_prob_data读取到[i]{j在DEPOTS中}<transition_prob[i,j]=col(j)>;代表{i在DEPOTS中,j在DEPOTS}中transition_prob[i,j]=转换_prob[i,j]/100;num transfer_cost{DEPOTS,DEPOTS}初始化0;将数据transfer_cost_data命名读入[i]{仓库中的j}<transfer_cost[i,j]=col(j)>;num repair_capacity{DEPOTS}init 0;将数据repair_data读入[depot]repair_capacity;num rental_price{i in DEPOTS,j in DEPOT,DAYS in DAYS,length in LENGTHS}(仓库中的num租金{i,仓库中的j,天数,长度)=(如果i=j,则price_same[length]else price_diff[length])-(如果天=5,长度=1,则&saturday_discount);num max_length=最大值{长度}长度;num mod{s in-max_length..num_days+max_length}=mod(s+num_day,num_dais);var汽车数量>=0;var NumUndamagedCarsStart{DEPOTS,DAYS}>=0;var NumDamagedCarstart{DEPOTS,DAYS}>=0;var NumCarsRented_i_day{i in DEPOTS,day in DAYS}>=0<=需求[i,day];impvar租车数量{i表示仓库,j表示仓库,天数,长度}=transition_prob[i,j]*length_prob[length]*NumCarsRented_i_day[i,day];var NumUndamagedCarsIdle{DEPOTS,DAYS}>=0;var受损车辆数量{仓库,天数}>=0;var NumUndamagedCarsTransferred{i in DEPOTS,DEPOTS diff{i},DAYS}>=0;var NumDamagedCarsTransferred{i in DEPOTS,DEPOTS diff{i},DAYS}>=0;impvar NumCarsTransferred{i in DEPOTS,j in DEPOTS-diff{i}=运输的未损坏车辆数量[i,j,day]+运输的受损车辆数量[i,j,day];var损坏车辆数已修复{i在车辆段,天数}>=0<=修复容量[i];最大利润=金额{i在仓库,j在仓库,天数,长度}(租金价格[i,j,天,长度]-成本[长度])*租车数量[i,j,天,长度]+存款金额{i,天数}&damage_prob*&damage_charge*租车数量_i_day[i,day]-DEPOTS中的sum{i,DEPOTS diff中的j{i},day in DAYS}转移成本[i,j]*转移的车辆数量[i,j,day]-&opportunity_cost_per_week*NumCars;con Undamaged_Inflow_con{i in DEPOTS,DAYS(日)}:未损坏车辆数量开始[i,day]=(1-&damage_prob)*仓库中的总和{j,长度}租车数量[j,i,mod[日长],长度]+DEPOTS diff{i}}中的sum{j运输的未损坏车辆数量[j,i,mod[day-&transfer_length]]+修复的受损车辆数量[i,mod[day-&repair_length]]+未损坏车辆数量[i,mod[day-1]];con DEPOTS中的损坏流入{i,天数}:受损车辆数量开始[i,day]=&damage_prob*仓库中的总和{j,长度为长度}租车数量[j,i,mod[日长],长度]+DEPOTS diff{i}}中的sum{j运输的损坏车辆数量[j,i,mod[day-&transfer_length]]+受损车辆数量[i,mod[day-1]];con Undamaged_Outflow_con{i in DEPOTS,DAYS}中的日期:未损坏数量CarsStart[i,天]=租车数量_i_day[i,day]+DEPOTS diff{i}}中的总和{j转移的车辆数量[i,j,day]+未损坏车辆数量[i,day];con Damaged_Outflow_con{i在DEPOTS中,以天为单位}:受损车辆数量开始[i,day]=修复的受损车辆数量[i,day]+仓库差异{i}}中的总和{j运输的损坏车辆数量[i,j,day]+受损车辆数量[i,day];con汽车编号con:车辆数量=车辆段中的总和{i}(length_prob[3]*租车数量_i_day[i,0]+sum{length in 2..3}length_prob[length]*NumCarsRented_i_day[i,1]+数量未损坏CarsStart[i,2]+受损车辆数量开始[i,2]);解决;对于1..NVAR_}_VAR_[j]中的{j=圆形(_VAR_[j].sol);打印NumCars;打印NumUndamagedCarsStart;打印NumDamagedCarsStart;打印NumCarsRented_i_day;在DEPOTS中打印{i,在DEPOTS-diff{i}中打印j,以天为单位:运输车辆数量[i,j,day].sol>0}运输车辆数量;print NumDamagedCarsRepaired.doual;退出;