Python递归死循环问题-有关数学建模整数规划
本帖最后由 zfcq 于 2021-7-22 10:44 编辑代码是解决数学建模中整数规划问题的代码
import math
from scipy.optimize import linprog
import sys
def integerPro(c, A, b, Aeq, beq, t=1.0E-12):
res = linprog(c, A_ub = A, b_ub=b, A_eq=Aeq, b_eq=beq)
if(type(res.x) is float):
bestX = *len(c)
else:
bestX = res.x
bestVal = sum()
if all(((x-math.floor(x))<t or (math.ceil(x)-x)<t ) for x in bestX):
return (bestVal, bestX)
else:
ind =
newCon1 = *len(A)
newCon2 = *len(A)
newCon1 = -1
newCon2 = 1
newA1 = A.copy()
newA2 = A.copy()
newA1.append(newCon1)
newA2.append(newCon2)
newB1 = b.copy()
newB2 = b.copy()
newB1.append(-math.ceil(bestX))
newB2.append(math.floor(bestX))
r1 = integerPro(c, newA1, newB1, Aeq, beq)
r2 = integerPro(c, newA2, newB2, Aeq, beq)
if r1 < r2:
return r1
else:
return r2
if __name__ == '__main__':
c =
A = [[-1,-6, -2],[-2,0,0]]
b = [-5, -3]
Aeq = []
beq=
print(integerPro(c, A, b, Aeq, beq))
运行结果应为:
(8.0, array())
主要是求解决整数规划-分支定界相关问题的方法,可以发有点相关解决方法,或者直接用其他库。。 递归教学实验可以,生产环境尽量不用。
上面是递归超限了,所以error了,把代码改成不用递归。 非要递归的话开头加上:
sys.setrecursionlimit(1000000)
suchocolate 发表于 2021-7-22 10:06
递归教学实验可以,生产环境尽量不用。
上面是递归超限了,所以error了,把代码改成不用递归。
那不就成了线性规划问题了吗,这不用递归的话,整数最优解难道要自己一点点试? 把代码改成尾递归 学渣李某人 发表于 2021-7-22 10:13
非要递归的话开头加上:
不输出结果,直接 RESTART: Shell 了 别用idle或者别用递归, 昨天有人问过这个问题 你这个问题和这个很像:
https://fishc.com.cn/forum.php?mod=viewthread&tid=199343 学渣李某人 发表于 2021-7-22 10:23
你这个问题和这个很像:
https://fishc.com.cn/forum.php?mod=viewthread&tid=199343
我这个应该是可以运行成功的,因为有确切结果,我怕我是代码逻辑问题 zfcq 发表于 2021-7-22 10:28
我这个应该是可以运行成功的,因为有确切结果,我怕我是代码逻辑问题
你先试试用别的编辑器运行一下吧, 实在不行可以用vscode打断点调试 我也不知道,不过悬赏40鱼币还是我头一次见
页:
[1]