Ala*_*aux 1 python linear-programming pulp
我想优化以下代码,但我收到如下错误,涉及约束中的第四行(我认为)。任何帮助将不胜感激,谢谢:
\n\n model += A[i] == min(P[i], C[i])\n TypeError: \'<\' not supported between instances of \'int\' and \'LpVariable\'\n\n P0 = [[1,0,4],[2,0,3],[4,6,2],[5,2,1],[1,0,0]]\nx = [2,3,0]\nxMax = [14,12,13]\nC = [122, 99, 158, 37, 44]\n\n\n# Instantiate our problem class\nmodel = pulp.LpProblem("Clem", pulp.LpMaximize)\n\n# Construct our decision variable lists\nx = pulp.LpVariable.dicts(\'pInstal\', (i for i in range(3)), lowBound = 0, cat = \'Continuous\')\ntx = pulp.LpVariable(\'tauxAutoconso\', 0)\nfor i in range(5):\nP = pulp.LpVariable.dicts(\'vectProduction\',(i for i in range(5)), lowBound = 0, cat = \'Continuous\')\nA = pulp.LpVariable.dicts(\'vectAutoConso\',(i for i in range(5)), lowBound = 0, cat = \'Continuous\')\n\n# Objective Function\nmodel += tx\n\n# Constraints\nfor i in range(3):\n model += x[i] <= xMax[i]\nfor i in range(5):\n model += P[i] == sum([P0[i][j] * x[j] for j in range(3)])\n model += A[i] == min(P[i], C[i])\nmodel += tx == sum(A) / sum(P)\nmodel += sum(x) == sum(C)\n\n# Solve our problem\nif pulp.LpStatus[model.status] != \'Optimal\':\n print(\'Solution qualit\xc3\xa9 :\', pulp.LpStatus[model.status])\nRun Code Online (Sandbox Code Playgroud)\n
我害怕约束
\n\nz = min(x,y)\nRun Code Online (Sandbox Code Playgroud)\n\n一般来说不太容易处理。这是带有额外二进制变量 \xce\xb4 的公式:
\n\nz \xe2\x89\xa4 x\nz \xe2\x89\xa4 y\nz \xe2\x89\xa5 x - M\xe2\x8b\x85\xce\xb4\nz \xe2\x89\xa5 y - M\xe2\x8b\x85(1-\xce\xb4)\n\xce\xb4 \xe2\x88\x88 {0,1}\nRun Code Online (Sandbox Code Playgroud)\n\n这里M是一个足够大的常数。(M 可以解释为 x 和 y 之间的最大可能距离)。
\n\n有时我们会利用目标如何推动变量。例如,如果目标已经将 z 向上推,我们可以放弃大于约束。
\n\n通常建议更改目标以包含此内容。即改变目标
\n\nmax obj\nRun Code Online (Sandbox Code Playgroud)\n\n到
\n\nmax obj + \xce\xb1\xe2\x8b\x85z\nRun Code Online (Sandbox Code Playgroud)\n\n对于某些系数 \xce\xb1>0。然而,这基本上将问题变成了不同的问题。该问题的最优解(通常)与您尝试求解的模型的最优解不同。
\n\n最后:一些高级求解器具有内置的 min() 函数,可以让建模者更轻松地进行操作。他们还可以就如何在内部重新制定这一方案做出更好的决定(可能有不同的表述;我刚刚展示了一个)。
\n