python 实现对偶单纯形法
昨天熬了一个通宵,女朋友写运筹学作业有个对偶单纯形法的题,据说是算了一天,感觉题无解,但是想确定一下,就很烦躁。我开始搜了一下,但是网上的代码都用不了,所以咱就研究了一下单纯形法和对偶单纯形法,用python写了个程序,百分百可用!用不了私信我!
对偶单纯形法
对偶单纯形法是指从对偶可行性逐步搜索出原始问题最优解的方法。由线性规划问题的对偶理论,原始问题的检验数对应于对偶问题的一组基本可行解或最优解;原始问题的一组基本可行解或最优解对应于对偶问题的检验数;原始问题约束方程的系数矩阵的转置是对偶问题约束条件方程的系数矩阵。所以,在求解常数项小于零的线性规划问题时,可以把原始问题的常数项视为对偶问题的检验数,原始问题的检验数视为对偶问题的常数项。
原理就不说了,直接上代码
from fractions import Fraction
# print(Fraction(2,2))
Cj=[-15,Fraction(3,4),-5,0,0] #要求的函数
list1=[[-2,0,-6,-1,1,0],[-1,-5,-2,-1,0,1]] #每个子列表第一位为b
z=[0,-15,-24,-5,0,0]#
Xb=[4,5]#
Cb=[0,0]
def show():print("--" * 50)print("| Cj ",end='|')for i in Cj:print(str(i).center(10),end='|')print(" "*10+"|")print("--"*50)print("| Cb | Xb | b ",end='|')for i in range(len(Cj)):print(("X"+str(i+1)).center(10),end='|')print(" "*10+"|")print("--" * 50)for i in range(len(list1)):print("|",end="")print(str(Cb[i]).center(10),end='|')print(("X"+str(Xb[i])).center(10),end='|')print(str(list1[i][0]).center(10),end="|")for j in range(1,len(list1[1])):print(str(list1[i][j]).center(10),end="|")print(" " * 10 + "|")print("--" * 50)print("| Z ",end='|')for i in range(len(z)):if i==0:print(str(z[i]).center(10),end='|')else:print(str(z[i]).center(10), end='|')print(" "*10+"|")print("--" * 50)print("**" * 50)
def fu():min_=0for i in range(len(list1)):if list1[i][0]<list1[min_][0]:min_=imin_2=1for i in range(1,len(list1[1])):if list1[min_][i]<0 :min_2=ibreakfor i in range(min_2+1,len(list1[1])):if list1[min_][i]<0:if Fraction(z[i],list1[min_][i])<Fraction(z[min_2],list1[min_][min_2]):min_2=itemp=list1[min_][min_2]for i in range(len(list1[1])):list1[min_][i]=Fraction(list1[min_][i],temp)Xb[min_]=min_2Cb[min_]=Cj[min_2-1]for i in range(len(list1)):temp1 = 0 - list1[i][min_2]for j in range(len(list1[1])):if i !=min_:list1[i][j]=Fraction(list1[i][j],1)+list1[min_][j]*temp1for i in range(1,len(z)):z[i] = Cj[i-1]for j in range(len(list1)):z[i]=z[i]-Cb[j]*list1[j][i]z[0]=0for i in range(len(list1)):z[0]=z[0]+list1[i][0]*Cb[i]
show()
while True:flag = 1for i in range(len(list1)):if(list1[i][0]<0):flag=0breakfor i in range(1, len(z)):if z[i] > 0:flag = 0breakif flag==0:fu()show()else:break
11/15修复了输出函数
要修改的部分
Cj=[-9,-12,-15,0,0,0] #要求的函数
list1=[[-10,-2,-2,-1,1,0,0],[-12,-2,-3,-1,0,1,0],[-14,-1,-1,-5,0,0,1]] #每个子列表第一位为b
z=[0,-9,-12,-15,0,0,0]#
Xb=[4,5,6]#
Cb=[0,0,0]#
在程序里这几个列表都是通过相同下标相关,看图和上面对应应该可以看懂,不会用直接私信我或者评论都可以!
注:分数要用Fraction(分子,分母)这么写,如:
例题运行结果
python 实现对偶单纯形法相关推荐
- 对偶单纯形法的Python实现
对偶单纯形法的Python实现 编写背景 程序 输出 说明 缺点 编写背景 对偶单纯形法的算法原理在各个版本的<运筹学>教材中已经被阐述得很详细了,但是手工计算不仅繁琐,而且容易出错.编写 ...
- 单纯形法只有两个约束条件_10分钟掌握对偶单纯形法
只听名字的话会感觉对偶单纯形法和对偶问题关系很大,其实不然(想要了解对偶问题的话可以看我之前的文章).对偶单纯形法在我看来和大M法以及两阶段法很像,都是用来补充纯粹的单纯形法无法解决特殊问题的缺陷.而 ...
- 线性规划总结3——单纯形法和对偶单纯形法
单纯形法 1)利用单纯形法原理, 求解原问题 2)求解过程中始终保持常数列≥0(保持原问题可行),而检验数由有正逐渐变为全部≤0(对偶问题由不可行变为可行) 对偶单纯形法 1)利用对偶原理, 求解原问 ...
- 运筹说 第31期 | 对偶理论与灵敏度分析—对偶单纯形法
经过前几期的学习,想必大家已经理解了线性规划问题的对偶问题.相关的重要理论以及影子价格.本期,小编将带大家学习对偶单纯形法的计算步骤. 1.对偶单纯形法 (1)单纯形法回顾 在讲解对偶单纯形法之前我们 ...
- 对偶理论和灵敏度分析(单纯形法矩阵形式、对偶理论及转化、影子价格、机会成本、差额成本、对偶单纯形法、灵敏度分析)
对偶理论和灵敏度分析 文章目录 对偶理论和灵敏度分析 修正单纯形法-矩阵描述和计算 对偶问题的提出 原问题与对偶问题转化 对偶问题最优解的经济意义--影子价格 对偶问题约束项的经济意义--生产产品的机 ...
- 运筹学_两阶段法对偶单纯形法_week5
目录 思维导图 例题解析 两阶段法 问题展示 解题过程 答案展示 对偶单纯形法 问题展示 解题过程 答案展示 最后吐槽 思维导图 例题解析 两阶段法 问题展示 Q:请利用两阶段法求解. 解题过程 原问 ...
- C语言实现单纯形法与对偶单纯形法
C语言实现单纯行法与对偶单纯行法 某次为了完成课程要求所做: 单纯形法代码如下,使用方法修改二位数组A[ip][jp], #include<stdio.h> #define ip 3 #d ...
- 单纯形法和对偶单纯形法
前言 我在学习这个知识点的时候,花了不少时间,苦于网上的教程要么和老师描述的方法不一致(当然应该也可以),要么不全,所以当时在做作业题的时候,花了不少时间(>10hours).因此想写一篇博文来 ...
- 10分钟掌握对偶单纯形法
只听名字的话会感觉对偶单纯形法和对偶问题关系很大,其实不然(想要了解对偶问题的话可以看我之前的文章).对偶单纯形法在我看来和大M法以及两阶段法很像,都是用来补充纯粹的单纯形法无法解决特殊问题的缺陷.而 ...
最新文章
- python有什么用处案例_用实例解释Python中的继承和多态的概念
- BLE GAP广播(Advertising Packet)格式
- 《openssl 编程》之错误处理
- 我们用力的活着却把自己丢了
- 微软应提前发布专用于ARM处理器的Windows 8平板电脑系统
- Matplotlib常用命令
- [Usaco2015 dec]Breed Counting
- ORACLE JOB创建及使用详解
- python制作web网页实例_基于python实现简单网页服务器代码实例
- 【Matlab】使用龙格库塔方法求积分
- arcengine Icommond 自定义工具
- 树莓派 3B+ HDMI 分辨率改不了 和一些坑坑洼洼
- 微信小程序直播二三事
- 如何将国外的ftp气象大数据下载回来(by quqi99)
- 计算机专业C语言编程学习重点:指针化难为易
- 计算机照片误删除还能恢复,删除的相片可以恢复吗_电脑误删的照片怎么恢复...
- 带有频闪灯教程的Android Torch App
- 私人定制情人节告白网站并且部署上线,谁说程序员没有爱!超详细步骤!源码分享!
- 3种方法设置PDF“打开密码”,总有一种适合你
- (4)Angular的开发
热门文章
- 将jar打入本地Maven仓库
- inf文件介绍(一)
- 指针中NULL(空指针)和void指针
- 解决:nameerror: name ‘glpushmatrix‘ is not defined
- mysql连接字段需要索引_mysql – 索引字段上的连接不使用索引
- Redis sentinel哨兵集群
- 【Arduino开源项目】LCR(电感/电容/电阻)电桥测试仪
- 图像变换及频域滤波(高斯滤波,巴特沃兹滤波器,高斯滤波器)
- pyqt5多窗口切换
- java计算机毕业设计的小区物业管理系统源码+数据库+系统+lw文档+mybatis+运行部署