AMPL 向集合中的项目添加最小最大约束
AMPL adding min max constraints to items in set
我最近在 class 中了解到 AMPL,我目前正在研究一个优化问题,该问题要求我找到所需需求的最小成本。我有问题的实际线路是这些:
1. 这是在我的 model 文件中:
minimize Total_Cost:
sum{i in GENS, j in LOADS} cost[i,j] * Allocate[i,j];
subject to GenConst {i in GENS}:
sum {j in LOADS} Allocate[i,j] <= Generation[i];
subject to DemConst {j in LOADS}:
sum {i in GENS} Allocate [i,j] >= Demand[j];
在我的数据文件中:
参数:基因组:
GenerationMin GenerationMax := #defines 设置 "GENS" 和参数 "Generation"
第一代 10 90
GEN2 10 100
GEN3 5 85 ;
我们只遇到过需求=发电的问题,但none 最小、最大以及需求!=供应。 运行 我的数据文件在 ampl GenerationMin is not a subscripted param
中时出现以下错误。当 运行 这个脚本只有最大值时它运行良好。这个问题,我只是猜测,与上面的几行有关。有人可以向我解释我哪里出错了以及如何解决这个问题吗?
编辑:我可以包含我的所有代码,但以防万一有人想重现该问题。 .mod 文件:
set GENS;
set LOADS;
param Generation {GENS} >=0;
param Demand {LOADS} >=0;
param cost {GENS, LOADS} >= 0;
var Allocate {GENS, LOADS} >= 0; #{GEN1, LOAD1}, {GEN1, LOAD2... etc}
minimize Total_Cost:
sum{i in GENS, j in LOADS} cost[i,j] * Allocate[i,j];
subject to GenConst {i in GENS}:
sum {j in LOADS} Allocate[i,j] <= Generation[i];
subject to DemConst {j in LOADS}:
sum {i in GENS} Allocate [i,j] >= Demand[j];
.数据文件:
data;
param: GENS:
GenerationMin GenerationMax := #defines set "GENS" and param "Generation"
GEN1 10 90
GEN2 10 100
GEN3 5 85 ;
param: LOADS: Demand := #Defining set "LOADS" and param "Demand"
Load1 70
Load2 20
Load3 30
Load4 60;
param cost:
Load1 Load2 Load3 Load4 :=
GEN1 39 14 11 14
GEN2 27 9 12 9
GEN3 24 14 17 13;
option solver cplex;
solve;
display Allocate;
display Allocate, Total_Cost > Output.txt
正确的 AMPL 语法是:
set GENS;
param GenerationMin {GENS} >=0;
param GenerationMax {GENS} >=0;
data;
param: GENS:
GenerationMin GenerationMax :=
GEN1 10 90
GEN2 10 100
GEN3 5 85 ;
display GENS,GenerationMin,GenerationMax;
即在模型和数据部分中同时使用 GenerationMin,GenerationMax
。
我最近在 class 中了解到 AMPL,我目前正在研究一个优化问题,该问题要求我找到所需需求的最小成本。我有问题的实际线路是这些: 1. 这是在我的 model 文件中:
minimize Total_Cost:
sum{i in GENS, j in LOADS} cost[i,j] * Allocate[i,j];
subject to GenConst {i in GENS}:
sum {j in LOADS} Allocate[i,j] <= Generation[i];
subject to DemConst {j in LOADS}:
sum {i in GENS} Allocate [i,j] >= Demand[j];
在我的数据文件中:
参数:基因组: GenerationMin GenerationMax := #defines 设置 "GENS" 和参数 "Generation"
第一代 10 90
GEN2 10 100
GEN3 5 85 ;
我们只遇到过需求=发电的问题,但none 最小、最大以及需求!=供应。 运行 我的数据文件在 ampl GenerationMin is not a subscripted param
中时出现以下错误。当 运行 这个脚本只有最大值时它运行良好。这个问题,我只是猜测,与上面的几行有关。有人可以向我解释我哪里出错了以及如何解决这个问题吗?
编辑:我可以包含我的所有代码,但以防万一有人想重现该问题。 .mod 文件:
set GENS;
set LOADS;
param Generation {GENS} >=0;
param Demand {LOADS} >=0;
param cost {GENS, LOADS} >= 0;
var Allocate {GENS, LOADS} >= 0; #{GEN1, LOAD1}, {GEN1, LOAD2... etc}
minimize Total_Cost:
sum{i in GENS, j in LOADS} cost[i,j] * Allocate[i,j];
subject to GenConst {i in GENS}:
sum {j in LOADS} Allocate[i,j] <= Generation[i];
subject to DemConst {j in LOADS}:
sum {i in GENS} Allocate [i,j] >= Demand[j];
.数据文件:
data;
param: GENS:
GenerationMin GenerationMax := #defines set "GENS" and param "Generation"
GEN1 10 90
GEN2 10 100
GEN3 5 85 ;
param: LOADS: Demand := #Defining set "LOADS" and param "Demand"
Load1 70
Load2 20
Load3 30
Load4 60;
param cost:
Load1 Load2 Load3 Load4 :=
GEN1 39 14 11 14
GEN2 27 9 12 9
GEN3 24 14 17 13;
option solver cplex;
solve;
display Allocate;
display Allocate, Total_Cost > Output.txt
正确的 AMPL 语法是:
set GENS;
param GenerationMin {GENS} >=0;
param GenerationMax {GENS} >=0;
data;
param: GENS:
GenerationMin GenerationMax :=
GEN1 10 90
GEN2 10 100
GEN3 5 85 ;
display GENS,GenerationMin,GenerationMax;
即在模型和数据部分中同时使用 GenerationMin,GenerationMax
。