5.4
import numpy as np
from scipy.optimize import minimize
def objective(x):
return -np.sum(np.sqrt(x) * np.arange(1, 101))
def constraint1(x):
return x[1] - 10
def constraint2(x):
return 20 - (x[1] + 2*x[2])
def constraint3(x):
return 30 - (x[1] + 2*x[2] + 3*x[3])
def constraint4(x):
return 40 - (x[1] + 2*x[2] + 3*x[3] + 4*x[4])
def constraint5(x):
return 1000 - np.dot(x, np.arange(1, 101))
constraints = [
{'type': 'ineq', 'fun': constraint1},
{'type': 'ineq', 'fun': constraint2},
{'type': 'ineq', 'fun': constraint3},
{'type': 'ineq', 'fun': constraint4},
{'type': 'ineq', 'fun': constraint5}
]
bounds = [(0, None)] * 100
x0 = np.ones(100) * 0.1
result = minimize(objective, x0, method='SLSQP', constraints=constraints, bounds=bounds)
print('Optimal solution:', result.x)
print('Objective function value at optimal solution:', -result.fun)

5.5
import numpy as np
from scipy.optimize import minimize
def objective(x):
return 2*x[0] + 3*x[0]**2 + 3*x[1] + x[1]**2 + x[2]
def constraint1(x):
return 10 - (x[0] + 2*x[0]**2 + x[1] + 2*x[1]**2 + x[2])
def constraint2(x):
return 50 - (x[0] + x[0]**2 + x[1] + x[1]**2 - x[2])
def constraint3(x):
return 40 - (2*x[0] + x[0]**2 + 2*x[1] + x[2])
def constraint4(x):
return x[0]**2 + x[2] - 2
def constraint5(x):
return 1 - (x[0] + 2*x[1])
constraints = [
{'type': 'ineq', 'fun': constraint1},
{'type': 'ineq', 'fun': constraint2},
{'type': 'ineq', 'fun': constraint3},
# {'type': 'eq', 'fun': constraint4},
{'type': 'ineq', 'fun': constraint5}
]
bounds = [(0, None)] * 3
x0 = np.array([0.1, 0.1, 0.1])
result = minimize(objective, x0, method='SLSQP', constraints=constraints, bounds=bounds)
print('Optimal solution:', result.x)
print('Objective function value at optimal solution:', result.fun)
5.7
import numpy as np
demands = [40, 60, 80]
max_production = 100
total_demand = sum(demands)
dp = np.full((4, total_demand + 1), float('inf'))
dp[0][0] = 0
prev_production = np.full((4, total_demand + 1), -1)
for i in range(1, 4):
prev_demand = sum(demands[:i-1])
for j in range(total_demand + 1):
if j < prev_demand + demands[i-1]:
continue
for x in range(max(0, j - prev_demand - demands[i-1] + 1), min(max_production + 1, j - prev_demand + 1)):
production_cost = 50 * x + 0.2 * x**2
storage_cost = 4 * (j - prev_demand - x)
total_cost = dp[i-1][j-x] + production_cost + storage_cost
if total_cost < dp[i][j]:
dp[i][j] = total_cost
prev_production[i][j] = x
min_cost = float('inf')
final_state = -1
for j in range(total_demand, total_demand + 1):
if dp[3][j] < min_cost:
min_cost = dp[3][j]
final_state = j
production_plan = [0] * 3
current_state = final_state
for i in range(3, 0, -1):
production_plan[i-1] = prev_production[i][current_state]
current_state -= prev_production[i][current_state]
print(f"最小总费用为: {min_cost} 元")
print("生产计划为:")
for i, plan in enumerate(production_plan, 1):
print(f"第{i}季度生产: {plan} 台")


被折叠的 条评论
为什么被折叠?



