规划问题的示例与实现

线性规划

示例文件

# 1.导入相关库
import numpy as np
from scipy import optimize as op

# 2.给出变量范围
x1 = (0, None)
x2 = (0, None)
x3 = (0, None)

# 3.给出相关参数

# 目标函数参数
c = np.array([-2, -3, 5])
# 不等式参数
A_ub = np.array([[-2, 5, -1], [1, 3, 1]])
B_ub = np.array([-10, 12])
# 等式参数
A_eq = np.array([[1, 1, 1]])
B_eq = np.array([7])

# 4.计算结果
res=op.linprog(c, A_ub, B_ub, A_eq, B_eq, bounds=(x1,x2,x3))
print(res)
print("<--------------------------------------->")

# 5.打印结果
x = res.x
print('目标值: \n' + str(-res.fun))
print('最优解为: ')
print('x1 = ' + str(round(x[0],2)))
print('x2 = ' + str(round(x[1],2)))
print('x3 = ' + str(round(x[2],2)))

运行结果

     con: array([1.80714554e-09])
     fun: -14.571428565645032
 message: 'Optimization terminated successfully.'
     nit: 5
   slack: array([-2.24602559e-10,  3.85714286e+00])
  status: 0
 success: True
       x: array([6.42857143e+00, 5.71428571e-01, 2.35900788e-10])
<--------------------------------------->
目标值: 
14.571428565645032
最优解为: 
x1 = 6.43
x2 = 0.57
x3 = 0.0

非线性规划

示例文件

# 1.导入相关库
import numpy as np
from scipy.optimize import minimize

# 2.定义非线性函数
def objective(x):
    return x[0] ** 2 + x[1]**2 + x[2]**2 +8

def constraint1(x):
    return x[0] ** 2 - x[1] + x[2]**2

def constraint2(x):
    return -(x[0] + x[1]**2 + x[2]**2-20)

def constraint3(x):
    return -x[0] - x[1]**2 + 2

def constraint4(x):
    return x[1] + 2*x[2]**2 -3

con1 = {'type': 'ineq', 'fun': constraint1}
con2 = {'type': 'ineq', 'fun': constraint2}
con3 = {'type': 'eq', 'fun': constraint3}
con4 = {'type': 'eq', 'fun': constraint4}
cons = ([con1, con2, con3,con4])

# 3.给出变量范围
b = (0, None)
bnds = (b, b ,b)

# 4.计算结果
x0=np.array([0, 0, 0])
solution=minimize(objective, x0, method='SLSQP', bounds=bnds, constraints=cons)
print(solution)
print("<--------------------------------------->")

# 5.打印结果
x = solution.x
print('目标值: \n' + str(solution.fun))
print('最优解为')
print('x1 = ' + str(round(x[0],2)))
print('x2 = ' + str(round(x[1],2)))
print('x3 = ' + str(round(x[2],2)))

运行结果

     fun: 10.651091840572583
     jac: array([1.10433471, 2.40651834, 1.89564812])
 message: 'Optimization terminated successfully'
    nfev: 71
     nit: 15
    njev: 15
  status: 0
 success: True
       x: array([0.55216734, 1.20325918, 0.94782404])
<--------------------------------------->
目标值: 
10.651091840572583
最优解为
x1 = 0.55
x2 = 1.2
x3 = 0.95
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值