python求解优化问题的几个例子

目录

1、最优化问题

2、线性规划

3、无约束优化

3.1单变量

3.2多变量


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

你可能感兴趣的:(python,numpy,scipy,pip)