鄭州做網(wǎng)站公司msgg平臺推廣是做什么
目錄
1、最優(yōu)化問題
2、線性規(guī)劃
3、無約束優(yōu)化
3.1單變量
3.2多變量
1、最優(yōu)化問題
使用scipy庫中的minimize函數(shù)來求解最優(yōu)化問題。在這個例子中,我們定義了一個目標(biāo)函數(shù) objective
,其形式為x1^2 + x2^2;以及一個約束條件 constraint
,即x1 + x2 -1 = 0。然后,我們通過調(diào)用minimize
函數(shù)來求解最小值問題。
from scipy.optimize import minimize# 定義目標(biāo)函數(shù)
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}# 求解最優(yōu)化問題
result = minimize(objective, x0, method='SLSQP', bounds=bounds, constraints=constraint_dict)# 打印求解結(jié)果
print("最優(yōu)解:", result.x)
print("最優(yōu)目標(biāo)值:", result.fun)
最優(yōu)解: [0.5 0.5]
最優(yōu)目標(biāo)值: 0.5
2、線性規(guī)劃
可以使用PuLP庫求解線性規(guī)劃問題。首先,我們需要安裝PuLP庫??梢允褂靡韵旅钤诮K端或命令提示符中安裝:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple PuLP
求解以下線性規(guī)劃問題:
maximize 2x + y
subject to:
3x - y <= 6
x + 2y <= 4
x >= 0, y >= 0
from pulp import *# 創(chuàng)建問題實例
prob = LpProblem("Simple_LP_Problem", LpMaximize)# 定義決策變量
x = LpVariable("x", lowBound=0)
y = LpVariable("y", lowBound=0)# 定義目標(biāo)函數(shù)
prob += 2*x + y# 定義約束條件
prob += 3*x - y <= 6
prob += x + 2*y <= 4# 求解問題
prob.solve()# 打印結(jié)果
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、無約束優(yōu)化
3.1單變量
import numpy as np
from scipy.optimize import minimize# 定義目標(biāo)函數(shù)
def objective(x):return x ** 2# 定義初始猜測值
x0 = 0.5# 定義優(yōu)化問題
constraints = None # 這里我們沒有約束條件,所以設(shè)置為None
options = {'disp': True} # 顯示優(yōu)化結(jié)果
result = minimize(objective, x0, method='Powell', constraints=constraints, options=options)# 輸出優(yōu)化結(jié)果
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# 定義目標(biāo)函數(shù)
def objective(x):x1, x2 = xreturn (x1**2-1)**2 + x1**2+x2**2-2*x1# 定義約束條件為無約束優(yōu)化問題
constraints = None# 定義初始點(diǎn)
x0 = np.array([1, 1])# 求解優(yōu)化問題
result = minimize(objective, x0, method='BFGS', constraints=constraints)# 輸出結(jié)果
print("最優(yōu)解:", result.x)
print("最小值:", result.fun)
最優(yōu)解: [ 1.00000021e+00 -2.06553830e-09]
最小值: -0.9999999999997886