Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成器表达式在具有纸浆的线性规划约束中不按预期工作_Python_Linear Programming_Pulp - Fatal编程技术网

Python 生成器表达式在具有纸浆的线性规划约束中不按预期工作

Python 生成器表达式在具有纸浆的线性规划约束中不按预期工作,python,linear-programming,pulp,Python,Linear Programming,Pulp,我试图用纸浆来解决这个最小化问题 我们有一包一包的芒果,每包都有一个类别、年龄和芒果的数量 # Packet Names and the count, category and age of mangoes in each packet. mango_packs = { "pack_1": { "count": 5, "category": "pack", "age"

我试图用纸浆来解决这个最小化问题

我们有一包一包的芒果,每包都有一个类别、年龄和芒果的数量

# Packet Names and the count, category and age of mangoes in each packet.
mango_packs = {
    "pack_1": {
    "count": 5,
    "category": "pack",
    "age": 10
},
"pack_2": {
    "count": 9,
    "category": "pack",
    "age": 10
},
"bag_2": {
    "count": 5,
    "category": "bag",
    "age": 20
},
"sack_1": {
    "count": 5,
    "category": "sack",
    "age": 5
    },
}
我们将需要大量芒果。(这将是一个整数)。 我们的目标是以较少残留芒果的方式提供包装。 例如,如果需求量为10,则我们为该包提供10个芒果。如果没有,则提供2包,每包5个芒果。如果我们只有3包,每包5、7和6个芒果,那么我们提供的是5和6个芒果,所以我们只有1个剩余。下面的代码正是我们需要的

对于需求15,它将给出以下输出

状态:最佳

OpenPack\u bag\u 2?对

OpenPack\u pack\u 1?对

OpenPack\u pack\u 2?没有

OpenPack_sack_1?对

TypeError:int()参数必须是字符串、类似字节的对象或数字,而不是“NoneType”

由于某种原因,生成器表达式中的if条件似乎总是返回True。不太确定

如何解决这个问题?我们需要添加新的2个约束

不带2个新约束的工作代码可以从此处运行:

编辑: 相同的数据在这里表示不同,如果它有助于尝试解决方案的人,因为我相信我们需要重新构建模型以找到解决方案

mango_packs_cat = {
    "cat_pack": {
        "packets": {
            "pack_1": {
                "name": "pack_1",
                "count": 5
            },
            "pack_2": {
                "name": "pack_2",
                "count": 9
            }
        },
        "age": 10
    },
    "cat_bag": {
        "packets":{
            "bag_1":{
                "name": "bag_1",
                "count": 5
            }
        },
        "age": 20
    },
    "cat_sack": {
        "packets":{
            "sack_1":{
                "name": "sack_1",
                "count": 5
            }
        },
        "age": 5
    }
}

我不认为你可以将集合的大小求和,并将其作为约束条件呈现给解算器……所以这可能是该语句的问题所在

您需要重新格式化模型,并为切换约束添加另一个索引变量。切换约束应为二进制值,按不同类别索引

您应该使用如下内容启用变量:(伪代码)


x[pack,cat]谢谢你的回答。我对纸浆和尝试这种解决方案是新手。但是到目前为止还没有得到正确的解决方案。
prob += len(set([mango_packs[name]["category"] for name in pack_names if lp_pack_vars[name] == 1 ])) <= 2
print("{}? {}".format(v.name, ("no", "yes")[int(v.varValue)]))
mango_packs_cat = {
    "cat_pack": {
        "packets": {
            "pack_1": {
                "name": "pack_1",
                "count": 5
            },
            "pack_2": {
                "name": "pack_2",
                "count": 9
            }
        },
        "age": 10
    },
    "cat_bag": {
        "packets":{
            "bag_1":{
                "name": "bag_1",
                "count": 5
            }
        },
        "age": 20
    },
    "cat_sack": {
        "packets":{
            "sack_1":{
                "name": "sack_1",
                "count": 5
            }
        },
        "age": 5
    }
}
x[pack, cat] <= u[pack, cat]*y[cat]
sum(y[cat]) <= 2