|
40鱼币
本帖最后由 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 = [sys.maxsize]*len(c)
- else:
- bestX = res.x
- bestVal = sum([x*y for x,y in zip(c,bestX)])
- if all(((x-math.floor(x))<t or (math.ceil(x)-x)<t ) for x in bestX):
-
- return (bestVal, bestX)
-
- else:
- ind = [i for i,x in enumerate(bestX) if (x-math.floor(x))>t and (math.ceil(x) - x)>t][0]
- newCon1 = [0]*len(A[0])
- newCon2 = [0]*len(A[0])
- newCon1[ind] = -1
- newCon2[ind] = 1
- newA1 = A.copy()
- newA2 = A.copy()
- newA1.append(newCon1)
- newA2.append(newCon2)
- newB1 = b.copy()
- newB2 = b.copy()
- newB1.append(-math.ceil(bestX[ind]))
- newB2.append(math.floor(bestX[ind]))
- r1 = integerPro(c, newA1, newB1, Aeq, beq)
- r2 = integerPro(c, newA2, newB2, Aeq, beq)
- if r1[0] < r2[0]:
- return r1
- else:
- return r2
-
- if __name__ == '__main__':
- c = [3,4,1]
- A = [[-1,-6, -2],[-2,0,0]]
- b = [-5, -3]
- Aeq = [[0,0,0]]
- beq=[0]
- print(integerPro(c, A, b, Aeq, beq))
复制代码
运行结果
运行结果应为:
(8.0, array([2, 0., 2.]))
主要是求解决整数规划-分支定界相关问题的方法,可以发有点相关解决方法,或者直接用其他库。。 |
|