【问题标题】:knapsack optimization with dynamic variables动态变量的背包优化
【发布时间】:2019-02-08 19:30:24
【问题描述】:

我正在尝试解决一个优化问题,它与背包问题非常相似,但无法使用动态规划来解决。 我要解决的问题和这个问题很相似:

【问题讨论】:

    标签: optimization machine-learning mathematical-optimization cplex knapsack-problem


    【解决方案1】:

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

    模型(.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);
    }
    

    数据.dat

    categories={Carbs,Protein,Fat};
    groups=[{Meat,Milk},{Pasta,Bread},{Oil,Butter}];
    products=[
    {Product11,Product12},{Product21,Product22,Product23},
    {Product31,Product32},{Product41,Product42},
    {Product51},{Product61,Product62}];
    
    prices=[1,4,1,3,2,4,2,1,3,1,2,1];
    
    // User 1
    Uc=[1,1,0];
    Ug=[0.8,0.2,0.1,1,0.01,0.6];
    budget=3;
    
    //User 2
    //Uc=[1,1,0];
    //Ug=[0.8,0.2,0.1,1,0.01,0.6];
    //budget=2;
    

    这给了

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

    【讨论】:

    • 您好,非常感谢您的宝贵反馈,这为我节省了很多时间。我曾尝试下载 IBM CPLEX Op Studio(免费版),但不幸的是我不能,所以我无法直接尝试代码(我正在尝试将此代码转换为 python 来尝试)。所以我有两个问题,如果我理解正确,我无法理解第 11 行(dexpr)这一行创建了一个布尔数组 xg,但这是一个嵌入的 if 语句:每个组的 z[p] 的所有值的总和g 应该大于 1,而不是 xg[g] 是 0?你也知道解决这个问题的算法吗?再次感谢您
    • 您好,您可以在 ibm.com/products/ilog-cplex-optimization-studio 获得免费的 CPLEX 社区版,它是 linkedin.com/pulse/… 的一部分
    • 是的,我已经使用了您在linkedin帖子中提供的链接,但是由于我不在美国无法下载,因此我在IBM论坛中发布了一个问题以解决这个问题。我使用 IBM DropSolve OAAS 作为临时解决方案。而且您的代码运行良好。非常感谢。
    • 嗨。我希望你还在这里。我有类似的问题:我有我的 .mod 文件,可以使用 CPLEX IDE 在我的个人计算机上执行它。然而,这需要很多时间,我想在我大学的 HPC 上执行,它只允许我们使用远程控制台连接。所以我需要与上述 .mod 文件等效的 .lp 文件。我怎样才能做到这一点?或者有什么方法可以在 cplex 控制台上执行 .mod 文件(带有数据文件)?谢谢。
    • 是的,你可以使用 oplrun(cplex 的命令行)和linkedin.com/pulse/…的许多链接
    猜你喜欢
    • 2011-09-14
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    相关资源
    最近更新 更多