目录
1、最优化问题
使用scipy库中的minimize函数来求解最优化问题。在这个例子中,我们定义了一个目标函数 objective
,其形式为x1^2 + x2^2;以及一个约束条件 constraint
,即x1 + x2 -1 = 0。然后,我们通过调用minimize
函数来求解最小值问题。
from scipy.optimize import minimize
# 定义目标函数
def objective(x):
return x[0]**2 + x[1]**2
# 定义约束条件
def constraint(x):
return x[0] + x[1] - 1
# 定义初始猜测值
x0 = [0, 0]
# 定义变量边界
bounds = ((-10, 10), (-10, 10))
# 定义约束条件字典
constraint_dict = {'type': 'eq', 'fun': constraint}
# 求解最优化问题
result = minimize(objective, x0, method='SLSQP', bounds=bounds, constraints=constraint_dict)
# 打印求解结果
print("最优解:", result.x)
print("最优目标值:", result.fun)
最优解: [0.5 0.5]
最优目标值: 0.5
2、线性规划
可以使用PuLP库求解线性规划问题。首先,我们需要安装PuLP库。可以使用以下命令在终端或命令提示符中安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple PuLP
求解以下线性规划问题:
maximize 2x + y
subject to:
3x - y <= 6
x + 2y <= 4
x >= 0, y >= 0
from pulp import *
# 创建问题实例
prob = LpProblem("Simple_LP_Problem", LpMaximize)
# 定义决策变量
x = LpVariable("x", lowBound=0)
y = LpVariable("y", lowBound=0)
# 定义目标函数
prob += 2*x + y
# 定义约束条件
prob += 3*x - y <= 6
prob += x + 2*y <= 4
# 求解问题
prob.solve()
# 打印结果
print("Status:", LpStatus[prob.status])
print("Optimal Solution:")
for var in prob.variables():
print(var.name, "=", var.varValue)
print("Optimal Objective Value =", value(prob.objective))
Status: Optimal
Optimal Solution:
x = 2.2857143
y = 0.85714286
Optimal Objective Value = 5.42857146
3、无约束优化
3.1单变量
import numpy as np
from scipy.optimize import minimize
# 定义目标函数
def objective(x):
return x ** 2
# 定义初始猜测值
x0 = 0.5
# 定义优化问题
constraints = None # 这里我们没有约束条件,所以设置为None
options = {'disp': True} # 显示优化结果
result = minimize(objective, x0, method='Powell', constraints=constraints, options=options)
# 输出优化结果
print("Optimized value: ", result.fun)
print("Optimized point: ", result.x)
Optimized value: 0.0
Optimized point: [0.]
3.2多变量
import numpy as np
from scipy.optimize import minimize
# 定义目标函数
def objective(x):
x1, x2 = x
return (x1**2-1)**2 + x1**2+x2**2-2*x1
# 定义约束条件为无约束优化问题
constraints = None
# 定义初始点
x0 = np.array([1, 1])
# 求解优化问题
result = minimize(objective, x0, method='BFGS', constraints=constraints)
# 输出结果
print("最优解:", result.x)
print("最小值:", result.fun)
最优解: [ 1.00000021e+00 -2.06553830e-09]
最小值: -0.9999999999997886