首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AMPL约束语法

AMPL约束语法
EN

Stack Overflow用户
提问于 2015-05-09 16:04:21
回答 1查看 232关注 0票数 1

我正在为一个计算优化类做一个项目,并且在为我的混合整数程序编写一个特定的约束时遇到了问题。

这个项目本质上是一个贷款组合优化问题,在这个问题上,我试图最大限度地提高对贫困的影响,同时满足对风险、回报和支出的限制。我几乎有我所有的限制工作,但这是最后一个给我一个问题。

这是布景;

代码语言:javascript
复制
#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

决策变量

代码语言:javascript
复制
#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 

这就是给我一个问题的约束;

代码语言:javascript
复制
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];

我想说的是,对每个区域来说,检查向每个国家发放的贷款数额,并确保其低于或等于该区域贷款配额的一半。当我试图运行这个模型时,我只得到第二行的基本语法错误。

在此之前,我有一个类似的约束,检查以确保每个地区至少获得其贷款总额的区域配额,而且它似乎正在按预期工作;

代码语言:javascript
复制
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的专家能帮我把这最后的限制发挥作用。

谢谢

乔希

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-10 20:47:31

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

代码语言:javascript
复制
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区域的所有国家相加(情况似乎是这样),您可能应该拥有如下内容:

代码语言:javascript
复制
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];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30142141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档