Optimization 动态变量背包优化

Optimization 动态变量背包优化,optimization,machine-learning,mathematical-optimization,cplex,knapsack-problem,Optimization,Machine Learning,Mathematical Optimization,Cplex,Knapsack Problem,我试图解决一个优化问题,它非常类似于背包问题,但不能用动态规划来解决。 我想解决的问题与这个问题非常相似: 事实上,您可以使用CPLEX解决这个问题。 让我在OPL中向您展示这一点 model.mod {string} categories=...; {string} groups[categories]=...; {string} allGroups=union (c in categories) groups[c]; {string} products[allGroups]=...;

我试图解决一个优化问题,它非常类似于背包问题,但不能用动态规划来解决。 我想解决的问题与这个问题非常相似:


事实上,您可以使用CPLEX解决这个问题。 让我在OPL中向您展示这一点

model.mod

{string} categories=...;

{string} groups[categories]=...;

{string} allGroups=union (c in categories) groups[c];

{string} products[allGroups]=...;
{string} allProducts=union (g in allGroups) products[g];

float prices[allProducts]=...;

int Uc[categories]=...;
float Ug[allGroups]=...;

float budget=...;

dvar boolean z[allProducts]; // product out or in ?

dexpr int xg[g in allGroups]=(1<=sum(p in products[g]) z[p]);
dexpr int xc[c in categories]=(1<=sum(g in groups[c]) xg[g]);

maximize 
sum(c in categories) Uc[c]*xc[c]+
sum(c in categories) sum(g in groups[c]) Uc[c]*Ug[g]*xg[g];
subject to
{
ctBudget:
    sum(p in allProducts) z[p]*prices[p]<=budget;
}

{string} solution={p | p in allProducts : z[p]==1};

execute
{
writeln("solution = ",solution);
}
这就给了

solution =  {"Product11" "Product21" "Product41"}

您好,非常感谢您的宝贵反馈,这为我节省了很多时间。我曾尝试下载IBMCPlexOpStudio免费版,但不幸的是我无法下载,因此我无法直接尝试我正在尝试将此代码转换为python来尝试的代码。所以我有两个问题,我不能理解第11行dexpr,如果我理解正确的话,这一行创建了一个布尔数组xg,但是这是一个嵌入的if语句:每个组g的z[p]的所有值之和都应该大于1,而不是xg[g]为0?你对解决这个问题的算法有什么想法?再次感谢你,我可以在那里获得免费的CPLEX社区版,这是我使用了你在linkedin帖子中提供的链接,但是因为我不在美国,我无法下载,为了解决这个问题,我在IBM论坛上发布了一个问题。我使用IBM DropSolve OAAS作为临时解决方案。你的代码工作得很好。非常感谢你。
solution =  {"Product11" "Product21" "Product41"}