Optimization AMPL向集合中的项目添加最小-最大约束

Optimization AMPL向集合中的项目添加最小-最大约束,optimization,linear-programming,ampl,Optimization,Linear Programming,Ampl,我最近在一门课上被介绍到AMPL,我目前正在研究一个优化问题,这个问题要求我找到满足需求的最小成本。我所讨论的实际线路如下: 1.这在我的模型文件中: 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 D

我最近在一门课上被介绍到AMPL,我目前正在研究一个优化问题,这个问题要求我找到满足需求的最小成本。我所讨论的实际线路如下: 1.这在我的模型文件中:

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;

i、 e.在模型和数据部分中同时使用GenerationMin和GenerationMax。

是否确定消息为Generation1不是订阅参数?没有第1代。哦,很抱歉,我在发帖的时候还在进一步玩弄它,但是错误是现在的第1代不是。我已经更新了我的帖子。模型有Generation,而数据有GenerationMin,GenerationMax。模型和数据部分中的符号名称显然需要匹配。Kalvelangen,我明白你的意思。我相信我成功了!不过,我有一个澄清。因为我现在有两个参数,GenMin和GenMax,所以我需要在.mod文件中添加另一个约束来测试另一个选项。在我的例子中,我已经在测试>=了,所以我需要为它做另一个约束
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;