AMPL 约束语法

AMPL constraint syntax

我正在从事一个计算优化项目 class,但在为我的混合整数程序编写特定约束时遇到问题。

该项目本质上是一个贷款组合优化问题,我试图在满足风险、return 和支付约束的同时最大限度地提高对贫困的影响。我几乎所有的约束都按预期工作,但最后一个给我带来了问题。

这是集合;

#SETS
set REGION;                                 #Set of regions
set COUNTRY;                                #Set of countries
set LOAN_DURATION;                          #Set of loans
set GROUP within {COUNTRY,REGION};          #Set of countries within regions

决策变量

#VARIABLES

var x{COUNTRY,LOAN_DURATION}>=0;            #Amount of money that can be loaned     #to each country c by loan type l
var y{COUNTRY,LOAN_DURATION} binary;        #decision of whether to use loan type #l for each country c 

这是给我带来问题的约束;

subject to WITHIN_REGION{r in REGION, (c,r) in GROUP, l in LOAN_DURATION}:
x[c,l] <= QUOTA[r]*sum{c in COUNTRY, l in LOAN_DURATION} x[c,l];

我想说的是,对于每个地区,检查借给每个国家的金额,并确保它小于或等于借给该地区的配额的一半。当我尝试 运行 这个模型时,我只得到第二行的基本语法错误。

我在这个之前有一个类似的限制,它检查以确保每个区域至少获得其贷款总额的区域配额,并且它似乎按预期工作;

subject to REGION_QUOTA{r in REGION}:
sum{(c,r) in GROUP, l in LOAN_DURATION} x[c,l] >= QUOTA[r]*sum{c in COUNTRY, l in LOAN_DURATION} x[c,l];

所以我想知道是否有任何 ampl 专家可以帮助我使最后一个约束起作用。

谢谢

乔希

问题是您在范围重叠的两个不同索引表达式 (c,r) in GROUPc in COUNTRY 中使用相同的索引 c 名称。您可以重命名第二个索引以避免错误:

subject to WITHIN_REGION{r in REGION, (c,r) in GROUP, l in LOAN_DURATION}:
x[c,l] <= QUOTA[r]*sum{c2 in COUNTRY, l in LOAN_DURATION} x[c2,l];

尽管如果您想对区域 r 中所有国家/地区的 x[c2,l] 求和,这似乎是这种情况,您可能应该有类似的内容:

subject to WITHIN_REGION{r in REGION, (c,r) in GROUP, l in LOAN_DURATION}:
x[c,l] <= QUOTA[r]*sum{(c2,r) in GROUP, l in LOAN_DURATION} x[c2,l];