AMPL约束语法
问题描述:
我正在研究一个计算优化类的项目,并且遇到了为我的混合整数程序编写特定约束的问题。AMPL约束语法
该项目本质上是一个贷款组合优化问题,我试图在满足对风险,回报和支出的限制的同时最大化对贫困的影响。我几乎所有的约束条件都按预期工作,但是最后一个给我提出了一个问题。
这里是套;
#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];
所以我想知道是否有任何扩大专家在那里,可以让我得到这最后一个约束的手工作。
感谢
乔希
答
的问题是,你在两个不同的索引表达式中具有重叠范围,(c,r) in GROUP
和c 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];
但如果你要总结x[c2,l]
在所有国家地区r
,这似乎是这种情况,你应该有类似:
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];
谢谢你的帮助。当我将你的建议用于c和l时,它按预期工作。 – Josh
对,我没有注意到'l'也需要重命名。 – vitaut