我正在尝试实现一个Python函数,它可以解决最小化问题。我习惯用Excel解算器的“二元约束”函数和进化求解方法来实现
例如,目标函数可以采用以下形式:
3*x[0]+4*x[1]+5*x[2]+5*x[3]-12
其中12是一个变化常数。其目的是达到最接近0的值。关键是所有x都应该是0或1。所有x都可以是正的或负的,常数也是一样的
我尝试了如下Scipy:
import numpy as np
from scipy.optimize import minimize
def objective(x):
return 3*x[0]+4*x[1]+5*x[2]+5*x[3]
def cons1(x):
return 3*x[0]+4*x[1]+5*x[2]+5*x[3]-12
# initial guesses
n = 4
x0 = np.zeros(n)
x0[0] = 1.0
x0[1] = 1.0
x0[2] = 1.0
x0[3] = 1.0
# show initial objective
print('Initial Objective: ' + str(objective(x0)))
# optimize
b = (0.0,1.0)
bnds = (b, b, b, b)
con1 = {'type':'eq', 'fun':cons1}
cons= [con1]
solution = minimize(objective,x0,method='SLSQP',\
bounds=bnds, constraints=cons)
x = solution.x
# show final objective
print('Final Objective: ' + str(objective(x)))
# print solution
print('Solution')
print('x1 = ' + str(x[0]))
print('x2 = ' + str(x[1]))
print('x3 = ' + str(x[2]))
print('x4 = ' + str(x[3]))
这将产生:
Initial Objective: 17.0
Final Objective: 11.999999999999996
Solution
x1 = 0.799999999999997
x2 = 0.7333333333333341
x3 = 0.6666666666666663
x4 = 0.6666666666666681
我想我缺少一些参数或配置
目前没有回答
相关问题 更多 >
编程相关推荐