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 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];
尽管如果您想对区域 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];
我正在从事一个计算优化项目 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 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];
尽管如果您想对区域 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];