规划问题简介与ortools求解简单线性规划问题举例

前言

什么是AI?
The theory and development of computer systems able to perform tasks normally requiring human intelligence.(–Oxford Dictionary)
Using data to solve problems.(–cy)

规划问题简介

在这里插入图片描述
在这里插入图片描述
看到线性规划问题,有没有让你想起峥嵘的高中岁月?高考数学大题第4题,一般就是卷子背面的第一题(湖北考生)。不过高中阶段的线性规划一般是二维的,即变量只有两个x和y,然后求Z的最值,如下图:
在这里插入图片描述
不过实际问题可能变量不止2个(x和y),但是求解的思想是一样的。变量很多的时候,手动计算比较麻烦,可以用计算机帮忙跑一下,下面举的简单例子变量只有2个,但是求解N多个也是没有问题的,只需要添加变量和约束就好。

ortools求解简单线性规划问题举例

问题

在这里插入图片描述

求解程序

from ortools.linear_solver import pywraplp

# 设置MIP问题解析引擎 SCIP
solver = pywraplp.Solver.CreateSolver('SCIP')

# 变量X Y均为非负   就是设置 x>=0 y>=0
infinity = solver.infinity()
x = solver.IntVar(0.0, infinity, 'x')
y = solver.IntVar(0.0, infinity, 'y')
print('变量数量:', solver.NumVariables())

变量数量: 2

# 设置约束条件
solver.Add(x + 7 * y <= 17.5)#上面已经规定了 x和y是大于0的 这里再补充约束条件
solver.Add(x <= 3.5)
print('约束的数量:', solver.NumConstraints())

约束的数量: 2

# 设置约束条件
solver.Add(x + 7 * y <= 17.5)#上面已经规定了 x和y是大于0的 这里再补充约束条件
solver.Add(x <= 3.5)
print('约束的数量:', solver.NumConstraints())

# 求解最大值问题
solver.Maximize(x + 10 * y) #就是那个目标函数 z=x+10y
status = solver.Solve()

if status == pywraplp.Solver.OPTIMAL:
    print('目标值 =', solver.Objective().Value())
    print('x =', x.solution_value())
    print('y =', y.solution_value())
else:
    print('问题没有最优解')

# 显示solve额外信息
print('执行时间(毫秒)',solver.wall_time())
print('Iteration: ',solver.iterations())
print('branch-and-bound nodes: ', solver.nodes())

约束的数量: 4
目标值 = 23.0
x = 3.0
y = 2.0
执行时间(毫秒) 884220
Iteration: 0
branch-and-bound nodes: 1

总结

(如果您发现我写的有错误,欢迎在评论区批评指正)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值