单纯形法、scipy库与非线性规划求解问题

单纯形法的基本定义

大M法求解线性规划的原理

excel求解

Python调用optimize包和scipy求解线性规划

Python编程实现单纯形法

对比情况

非线性规划

单纯形法的基本定义

单纯形法的基本定义:

一般线性规划问题中当线性方程组的变量数大于方程个数,这时会有不定数量的解,而单纯形法是求解线性规划问题的通用方法。 具体步骤是,从线性方程组找出一个个的单纯形,每一个单纯形可以求得一组解,然后再判断该解使目标函数值是增大还是变小了,决定下一步选择的单纯形。通过优化迭代,直到目标函数实现最大或最小值。 换而言之,单纯形法就是秉承“保证每一次迭代比前一次更优”的基本思想:先找出一个基本可行解,对它进行鉴别,看是否是最优解;若不是,则按照一定法则转换到另一改进后更优的基本可行解,再鉴别;若仍不是,则再转换,按此重复进行。因基本可行解的个数有限,故经有限次转换必能得出问题的最优解。如果问题无最优解,也可用此法判别。

大M法求解线性规划的原理

大M法求解线性规划的原理:

大M法首先将线性规划问题化为标准型。如果约束方程组中包含有一个单位矩阵I,那么已经得到了一个初始可行基。否则在约束方程组的左边加上若千个非负的人工变量,使人工变量对应的系数列向量与其它变量的系数列向量共同构成-一个单位矩阵。以单位矩阵为初始基,即可求得一-个初始的基本可行解。 为了求得原问题的初始基本可行解,必须尽快通过迭代过程把人工变量从基变量中替换出来成为非基变量。为此可以在目标函数中赋予人工变量一个绝对值很大的负系数-M。这样只要基变量中还存在人工变量,目标函数就不可能实现极大化。 以后的计算与单纯形表解法相同,M只需认定是一个很大的正数即可。假如在单纯形最优表的基变量中还包含人工变量,则说明原问题无可行解。否则最优解中剔除人工变量的剩余部分即为原问题的初始基本可行解。

excel求解

题目:

利用包求解:

Excel使用大M法求解线性规划:

Python调用optimize包和scipy求解线性规划

#导入包

from scipy import optimize

import numpy as np

#确定c,A_ub,B_ub

c = np.array([50,100])

A_ub = np.array([[1,1],[2,1],[0,1]])

B_ub = np.array([300,400,250])

#求解

res =optimize.linprog(-c,A_ub,B_ub)

print(res)

结果:

Python编程实现单纯形法

import numpy as np

def pivot(d,bn):

l = list(d[0][:-2])

jnum = l.index(max(l)) #转入编号

m = []

for i in range(bn):

if d[i][jnum] == 0:

m.append(0.)

else:

m.append(d[i][-1]/d[i][jnum])

inum = m.index(min([x for x in m[1:] if x!=0])) #转出下标

s[inum-1] = jnum

r = d[inum][jnum]

d[inum] /= r

for i in [x for x in range(bn) if x !=inum]:

r = d[i][jnum]

d[i] -= r * d[inum]

def solve(d,bn):

flag = True

while flag:

if max(list(d[0][:-1])) <= 0: #直至所有系数小于等于0

flag = False

else:

pivot(d,bn)

def printSol(d,cn):

for i in range(cn - 1):

if i in s:

print("x"+str(i)+"=%.2f" % d[s.index(i)+1][-1])

else:

print("x"+str(i)+"=0.00")

print("objective is %.2f"%(-d[0][-1]))

d = np.loadtxt("./data.txt", dtype=np.float)

(bn,cn) = d.shape

s = list(range(cn-bn,cn-1)) #基变量列表

solve(d,bn)

printSol(d,cn)

data数据:

结果:

对比情况

两种结果对比,就值而言,两种方式基本一样误差不大,但单纯形法的结果更加精确为整数值。

非线性规划

# coding=utf-8

from scipy.optimize import minimize

import numpy as np

# demo 2

#计算 (2+x1)/(1+x2) - 3*x1+4*x3 的最小值 x1,x2,x3的范围都在0.1到0.9 之间

def fun(args):

a,b,c,d=args

v=lambda x: (a+x[0])/(b+x[1]) -c*x[0]+d*x[2]

return v

def con(args):

# 约束条件 分为eq 和ineq

#eq表示 函数结果等于0 ; ineq 表示 表达式大于等于0

x1min, x1max, x2min, x2max,x3min,x3max = args

cons = ({'type': 'ineq', 'fun': lambda x: x[0] - x1min},\

{'type': 'ineq', 'fun': lambda x: -x[0] + x1max},\

{'type': 'ineq', 'fun': lambda x: x[1] - x2min},\

{'type': 'ineq', 'fun': lambda x: -x[1] + x2max},\

{'type': 'ineq', 'fun': lambda x: x[2] - x3min},\

{'type': 'ineq', 'fun': lambda x: -x[2] + x3max})

return cons

if __name__ == "__main__":

#定义常量值

args = (2,1,3,4) #a,b,c,d

#设置参数范围/约束条件

args1 = (0.1,0.9,0.1, 0.9,0.1,0.9) #x1min, x1max, x2min, x2max

cons = con(args1)

#设置初始猜测值

x0 = np.asarray((0.5,0.5,0.5))

res = minimize(fun(args), x0, method='SLSQP',constraints=cons)

print(res.fun)

print(res.success)

print(res.x)

结果:

python解非线性规划问题讲析_python中线性规划中的单纯形法、scipy库与非线性规划求解问题...相关推荐

  1. python参数估计_python简单实现最大似然估计scipy库的使用详解

    python简单实现最大似然估计 1.scipy库的安装 wim+R输入cmd,然后cd到python的pip路径,即安装:pip install scipy即可 2.导入scipy库 from sc ...

  2. python解多元多次方程组_Python求解多重或非线性方程,python,多元,多次,方程组,线性方程组...

    背景: 如何使用python求解多元多次方程组或者非线性方程组. 原创内容,转载注明出处!请勿用于商业用途! (上篇用python拟合2019nCov感染人数的文章被不少博主转载了,发的比较早,不少博 ...

  3. python解压版怎么安装_python 解压版 zip file 安装

    python 解压版 zip file 安装 Python Releases for Windows 找到最新稳定版本的 "Download Windows x86-64 embeddabl ...

  4. python web开发第三方库_Python Web开发中常用的第三方库

    Python Web开发中常用的第三方库 TL;DR 经常有朋友问,如果用Python来做Web开发,该选用什么框架?用 Pyramid 开发Web该选用怎样的组合等问题?在这里我将介绍一些Pytho ...

  5. python判断网页密码加密方式_Python模拟网页中javascript加密与验证的相关处理

    在做网络爬虫的过程中你是否一些在这方面做的很好的网站,你向知道他是通过哪些相关的操作做出这么好的网站,以下就是文章的相关内容的具体介绍,希望你浏览完下面的内容会有所收获.Python模拟网页的java ...

  6. python的发展及应用前景论文_Python在物联网中的应用与发展综述

    123 Python 在物联网中的应用与发展综述 陈光辉 (北京信息科技大学 自动化学院,北京 100091) 摘要:文章主要介绍了物联网的产生与发展和对人们生活与社会生产的促进作用,以及我国物联网发 ...

  7. python解压加密zip文件_Python:解压缩前检测一个zip文件否为加密,两种算法。

    前一篇文章介绍了如何用python自动解压缩加密的zip文件, 但是有一个问题,在服务器端脚本在解加密zip文件之前,需要检测其是否是加密文件,若是,则询问密码,结合密码解压缩:如果不是,则则直接解压 ...

  8. python 解压文件 已存在_python解压zip和rar文件问题以及解决方法

    写此文的目的是记录自己的学习过程,一些经过,遇到问题以及解决问题的方法,存放在这里,方便自己以后复习以及自己的一些总结,如果此文对你有帮助,请随时联系我微信:wangzhixiong1533 ◆ ◆ ...

  9. python 解压文件 重名_python小试身手-文件重命名,文件复制和压缩(.gz) - 铁匠铺的小铁匠...

    1 #!/usr/local/bin/python 2 #coding=UTF-8 3 4 importos5 importcsv as csv6 importre7 importshutil8 im ...

最新文章

  1. 分分钟教会你使用HTML写Web页面
  2. 让CPU占用率听你指挥
  3. 淘宝npm镜像使用方法(转)
  4. 十、eclipse快捷键大全
  5. 从单纯聊天到在线生活
  6. gsea结果分析图怎么看_微信公众平台数据分析怎么看
  7. FLEX与JAVA不通讯错误与解决方法(转)
  8. 使用C#的泛型队列Queue实现生产消费模式
  9. 音频杂音问题_OBS直播出现杂音或者电流声、没声音或者调大音量等操作
  10. sir模型初始值_SIR 模型笔记
  11. 【密码学基础】02 数论基础
  12. promise执行顺序总结
  13. 【云原生Docker系列第二篇】Docker容器管理(我在人间贩卖黄昏,只为带着星光照耀你)
  14. 暴雪战网怎么修改服务器,战网昵称修改服务
  15. 关于人生和青春的思考
  16. c语言程序中计算圆的面积,C代码:使用概率的方法计算圆的面积
  17. 度金互联网金融社区:P2P网贷资金必须托管 监管脚步渐响
  18. 华红兵:2019带你探索“共享服务模式”
  19. 开放后的繁荣——-揭秘韩国游戏市场
  20. 安装 SQL Sever 2000至最后步骤报错“安装程序配置服务器失败。 参考服务器错误日志和 C: \Windows\sqltsp.log 了解更多信息”

热门文章

  1. 向有环的环形链表中插入新节点
  2. 开启大数据时代谷歌三篇论文-BigTable
  3. 重温强化学习之策略梯度算法
  4. pandas笔记:根据列索引名称/行索引名称 对列重新排序
  5. torch_geometric笔记:max_pool 与max_pool_x
  6. Data Mining 论文翻译:Deep Learning for Spatio-Temporal Data Mining: A Survey
  7. tableau可视化数据分析60讲(十四)-tableau可视化视图(交叉表项目符号图)
  8. 遗传算法与直接搜索工具箱学习笔记 -----从直接搜索算法开始
  9. Python零碎知识(2):强大的zip
  10. python字典内存分析_Python减少字典对象占用的七成内存