我正在为一个计算优化类做一个项目,并且在为我的混合整数程序编写一个特定的约束时遇到了问题。
这个项目本质上是一个贷款组合优化问题,在这个问题上,我试图最大限度地提高对贫困的影响,同时满足对风险、回报和支出的限制。我几乎有我所有的限制工作,但这是最后一个给我一个问题。
这是布景;
#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的专家能帮我把这最后的限制发挥作用。
谢谢
乔希
发布于 2015-05-10 20:47:31
问题是,在具有重叠作用域的两个不同索引表达式( (c,r) in GROUP和c in COUNTRY )中使用相同的索引c in COUNTRY名称。可以重命名第二个索引以避免错误:
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];https://stackoverflow.com/questions/30142141
复制相似问题