网上找了一些代码,发现有一些是不能用的,出现错误说集合为空

1.网上出现了好多次,但是不能用的,只能部分模型能用,比如例子中所示

原链接:https://www.jianshu.com/p/b233cfa06017

https://blog.csdn.net/kittyzc/article/details/81707464

 import numpy as np

 def pivot():
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():
flag = True
while flag:
if max(list(d[0][:-1])) <= 0: #直至所有系数小于等于0
flag = False
else:
pivot() def printSol():
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()
printSol() # txt文件里面的格式 1 14 6 0 0 0 0 0 1 1 1 1 0 0 0 4 1 0 0 0 1 0 0 2 0 0 1 0 0 1 0 3 0 3 1 0 0 0 1 6 # 求解模型
max z = x0+14*x1+6*x2 s.t. x0 + x1 + x2 <= 4 x0 <= 2 x2 <= 3 3*x1 + x2 <= 6

2. 在我的模型里面能用,不过显示比较繁琐,如果想要得到自己想要的,还需要在几个函数里面return

原链接:http://www.dataguru.cn/thread-909474-1-1.html

 Max z =  18*x1 + 12.5*x2

 s.t. x1 + x2 +x3 = 20

 x1 + x4 = 12

 x2 + x5 = 16

 x1,x2,x3,x4,x5 >= 0  

 运行下面脚本(单纯形法的Python实现)

 import numpy as np

 # 实体类 Table
# 控制类 Simplex class Table: def __init__(self): pass def set_para(self,A,b,c,base,z0): """ 输入LP必须已经化为标准形式 """ self.A=A self.b=b self.c=c self.z0=z0 self.base=base self.m,self.n=self.A.shape def build(self): self.table=np.zeros((self.m+1,self.n+1)) self.table[:-1,:1]=self.b.T self.table[-1 ,0]=self.z0 self.table[:-1,1:]=self.A self.table[-1, 1:]=c self.baseVar=base def is_best(self): for sigma_index in range(self.n): if sigma_index not in self.baseVar: sigma=self.table[-1,1+sigma_index] if sigma>0: return False return True def is_no_solution(self): for sigma_index in range(self.n): if sigma_index not in self.baseVar: sigma=self.table[-1,1+sigma_index] if sigma>0: no_solution_flag=True for a in self.table[:-1,1+sigma_index]: if a>0: no_solution_flag=False if no_solution_flag==True: return True return False def get_inVar(self): max_sigma=0 inVar=None for sigma_index in range(self.n): if sigma_index not in self.baseVar: sigma=self.table[-1,1+sigma_index] if sigma>max_sigma: max_sigma=sigma inVar=sigma_index return inVar def get_outVar(self,inVar): rates=[] for nobaseVar in range(self.m): a=self.table[nobaseVar,inVar+1] b=self.table[nobaseVar, 0 ] if a>0: rate=b/a rates.append((rate,nobaseVar)) return min(rates)[1] def in_out(self,inVar,outVar): a=self.table[outVar,inVar+1] self.table[outVar,:]/=a for i in range(self.m+1): if i != outVar: self.table[i,:]-=self.table[outVar,:]*self.table[i,inVar+1] self.baseVar[outVar]=inVar def show(self): print ('基变量/取值:',self.baseVar,end='/') print (self.table[:-1,0]) print ("单纯形表") for i in range(self.m+1): for j in range(self.n+1): print ('%6.2f'%self.table[i,j],end=' ') print () print () class Simplex: def __init__(self): self.table=Table() # 0 正常,尚未得到最优解,继续迭代 # 1 无解,无界解 # 2 达到最优解 self.status=0 self.inVar=None self.outVar=None def set_para(self,A,b,c,base,z0=0): self.table.set_para(A,b,c,base,z0) def output_result(self): self._main() if self.status==1: print("此问题无界") elif self.status==2: print("此问题有一个最优解") elif self.status==3: print("此问题有无穷多个最优解") def _main(self): self._build_table() while 1: self.table.show() if self._is_best() or self._is_no_solution(): return self._get_inVar() self._get_outVar() self._in_out() def _build_table(self): self.table.build() def _is_best(self): if self.table.is_best(): self.status=2 return True return False def _is_no_solution(self): if self.table.is_no_solution(): self.status=1 return True return False def _get_inVar(self): self.inVar=self.table.get_inVar() def _get_outVar(self): self.outVar=self.table.get_outVar(self.inVar) def _in_out(self): self.table.in_out(self.inVar,self.outVar) if __name__=="__main__": s=Simplex() A=np.matrix([[1,1,1,0,0], [ 1, 0,0,1,0], [ 0, 1,0,0,1]]) b=np.matrix([[20,12,16]]) c=np.matrix([[18,12.5,0,0,0]]) base=[2,3,4] s.set_para(A,b,c,base) s.output_result()

能用的单纯形法python代码的更多相关文章

  1. 可爱的豆子——使用Beans思想让Python代码更易维护

    title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...

  2. if __name__== "__main__" 的意思(作用)python代码复用

    if __name__== "__main__" 的意思(作用)python代码复用 转自:大步's Blog  http://www.dabu.info/if-__-name__ ...

  3. Python 代码风格

    1 原则 在开始讨论Python社区所采用的具体标准或是由其他人推荐的建议之前,考虑一些总体原则非常重要. 请记住可读性标准的目标是提升可读性.这些规则存在的目的就是为了帮助人读写代码,而不是相反. ...

  4. 一行python代码实现树结构

    树结构是一种抽象数据类型,在计算机科学领域有着非常广泛的应用.一颗树可以简单的表示为根, 左子树, 右子树. 而左子树和右子树又可以有自己的子树.这似乎是一种比较复杂的数据结构,那么真的能像我们在标题 ...

  5. [Dynamic Language] 用Sphinx自动生成python代码注释文档

    用Sphinx自动生成python代码注释文档 pip install -U sphinx 安装好了之后,对Python代码的文档,一般使用sphinx-apidoc来自动生成:查看帮助mac-abe ...

  6. 上传自己的Python代码到PyPI

    一.需要准备的事情 1.当然是自己的Python代码包了: 2.注册PyPI的一个账号. 二.详细介绍 1.代码包的结构: application \application __init__.py m ...

  7. 如何在batch脚本中嵌入python代码

    老板叫我帮他测一个命令在windows下消耗的时间,因为没有装windows那个啥工具包,没有timeit那个命令,于是想自己写一个,原理很简单: REM timeit.bat echo %TIME% ...

  8. ROS系统python代码测试之rostest

    ROS系统中提供了测试框架,可以实现python/c++代码的单元测试,python和C++通过不同的方式实现, 之后的两篇文档分别详细介绍各自的实现步骤,以及测试结果和覆盖率的获取. ROS系统中p ...

  9. 让计算机崩溃的python代码,求共同分析

    在现在的异常机制处理的比较完善的编码系统里面,让计算机完全崩溃无法操作的代码还是不多的.今天就无意运行到这段python代码,运行完,计算机直接崩溃,任务管理器都无法调用,任何键都用不了,只能强行电源 ...

随机推荐

  1. NLog文章系列—系列文章目录以及简要介绍

    参考文章:http://www.cnblogs.com/dflying/archive/2006/12/04/581750.aspx

  2. extentreports报告插件与testng集成

    前段时间在群里有人说了下用这个插件来生成测试报告,发现生成的报告非常不错.就下来学习了一下,并集成到了testng上,下面来分享一下: ExtentReports (by Anshoo Arora) ...

  3. 第一周006------Java 三大版本含义——Java ME和安卓开发的关系

    Java ME 和安卓开发没有任何关系 Java  SE(Java Standard Edition):标准版,定位在个人计算机的应用(桌面系统 QQ  游戏)Java  EE(Java Enterp ...

  4. 部署Harbor私有镜像仓库

    Harbor私有镜像仓库无坑搭建 目录 1. harbor介绍 2. docker-ce的安装 3. docker-compose的安装 4. Harbor私有仓库的安装 5. 客户端连接镜像仓库配置 ...

  5. U1. 广度优先搜索(BFS)和 广度优先搜索(DFS)

    广度优先搜索用栈(stack)来实现,整个过程可以想象成一个倒立的树形: 1.把根节点压入栈中. 2.每次从栈中弹出一个元素,搜索所有在它下一级的元素,把这些元素压入栈中.并把这个元素记为它下一级元素 ...

  6. Redis 常用命令学四:列表类型命令

    1.在列表两端增加值的命令 127.0.0.1:6379> lpush 1 (error) ERR wrong number of arguments for 'lpush' command 1 ...

  7. 服务提供者框架讲解 之 myJDBC

    利用一个简单的myJDBC,讲一下'服务提供者框架'的思想.主要是思想 目录 什么是 服务提供者框架 代码讲解 服务接口 服务提供者接口 服务注册API.服务访问API 静态工厂方法 服务实现类 – ...

  8. C++ 中不能声明为虚函数的函数有哪些?

    目录 普通函数 构造函数 内联成员函数 静态成员函数 友元函数 普通函数 普通函数(非成员函数)只能被overload,不能被override,而且编译器会在编译时绑定函数. 多态的运行期行为体现在虚 ...

  9. SAS学习笔记36 二分类logistic回归

    这里所拟合模型的AIC和SC统计量的值均小于只有截距的模型的相应统计量的值,说明含有自变量的模型较仅含有常数项的要好 但模型的最大重新换算 R 方为0.0993,说明模型拟合效果并不好,可能有其他危险 ...

  10. 本地Pycharm将spark程序发送到远端spark集群进行处理

    前言 最近在搞hadoop+spark+python,所以就搭建了一个本地的hadoop环境,基础环境搭建地址hadoop2.7.7 分布式集群安装与配置,spark集群安装并集成到hadoop集群, ...