5.4
代码:
import numpy as np
from scipy.optimize import minimize
def objective(x):
return -np.sum(np.sqrt(x))
constraints = [
{'type': 'ineq', 'fun': lambda x: 10 - x[0]},
{'type': 'ineq', 'fun': lambda x: 20 - (x[0] + 2*x[1])},
{'type': 'ineq', 'fun': lambda x: 30 - (x[0] + 2*x[1] + 3*x[2])},
{'type': 'ineq', 'fun': lambda x: 1000 - np.sum((np.arange(1, 101)[:, None] * x).T)},
*[{'type': 'ineq', 'fun': lambda x, i=k: 1000 - (101-i) * np.sum(x[:i+1])} for k in range(100)]
]
bounds = [(0, None)] * 100
x0 = np.zeros(100)
result = minimize(objective, x0, bounds=bounds, constraints=constraints)
if result.success:
print("Optimal solution found:")
print("x =", result.x)
print("Maximum z =", -result.fun)
else:
print("Optimization failed.")
结果:
Optimal solution found:
x = [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0.]
Maximum z = 0.0