运筹学实验一

  • 实验目的:
  • 实验要求:
  • 报告内容:
    • python实现:
      • 代码:
    • Lingo实现:
      • 代码:

实验目的:

python实现单纯形法、lingo实现灵敏度分析、对偶变量、人工变量

实验要求:

报告内容:

python实现:

代码:

import numpy as np
from fractions import Fraction as f
#本程序仅适用于标准形式的线性规划问题
#其中目标函数求最大,约束条件等式化,决策变量非负
#本程序实现的是单纯形法和大M法
def judge(matrix):#最优性检验if max(matrix[-1][:-1]) <= 0:  flag = Falseelse:flag = Truereturn flagdef initialTable(a,matrix,vect,c):  #基变换c2=np.array(c)for i in range(len(a[-1])-1):matrix[-1][i]=c2[i]-np.dot(matrix[:-1,i],[c2[vect[j]-1]for j in range(len(vect))])a = [list(i) for i in matrix]return a,matrixdef simplexTable(matrix,vect,m,n):   #输出单纯形表print('*'*20)print(' ',end='\t')for i in range(n):print('x{}'.format(i+1),end='\t')print('b')for i in range(m+1):if i <= m-1:print('x{}'.format(vect[i]),end='\t')elif i == m:print('cj-zj',end='\t')for j in matrix[i]:print(f(str(j)).limit_denominator(),end='\t')   #输出分数形式print(end='\n')def trans(a,matrix,vect,c):  #基变换#计算检验数maxSigmaj = max(matrix[-1][:-1]) #最大检验数k = a[-1].index(maxSigmaj)   #入基变量的下标l = {}                       #出基变量字典for i in a[:-1]:   if i[k] >0: #第k列第i行的值l[i[-1]/i[k]] = a.index(i)if len(l)!=0:theta = l[min(l)]    #出基变量的下标matrix[theta] = matrix[theta]/matrix[theta][k]for i in range(len(a)):if i != theta:matrix[i] = matrix[i] - matrix[i][k]*matrix[theta]
vect[theta] = k+1   #基变量下标变化#计算zc2=[0 for i in range(len(c))]c3=np.array(c)for i in range(len(c)):#滤去-Mif c[i]!=-M:c2[i]=c[i]c2=np.array(c2)x=[0 for i in range(len(c))]for i in range(len(vect)):x[vect[i]-1]=matrix[i][-1]x=np.array(x)matrix[-1][-1]=np.dot(c2,x)#把原来的列表也同时变换掉,为了方便索引a = [list(i) for i in matrix] return a,matrix,vectdef print_solution(matrix,vect,c,m,n):#打印最优解print('*'*20)print('\n')print("最优解为:")for i in range(m):print('x{}*={}'.format(vect[i],matrix[i][-1]),end=',')print('\nz*={}'.format(matrix[-1][-1]))def common(a,b,c,m,n):a=[i+[j] for i,j in zip(a,b)]+[c+[0]]matrix = np.array(a, dtype=np.float64)   vect = [int(input('输入基变量下标')) for i in range(m)]a,matrix=initialTable(a,matrix,vect,c)#输出单纯形表simplexTable(matrix,vect,m,n)while judge(matrix):a,matrix,vect = trans(a,matrix,vect,c)simplexTable(matrix,vect,m,n)print_solution(matrix,vect,c,m,n)
def test():m = 4            #约束条件数n = 6             #决策变量数a = [[2,2,1,0,0,0],[1,2,0,1,0,0],[4,0,0,0,1,0],[0,4,0,0,0,1]]#资源矩阵b = [12,8,16,12]    #右端项c = [2,3,0,0,0,0]     #价值向量common(a,b,c,m,n)
def test1():    print("第一章第五节ppt例6 \n")m1 = 3#约束条件数n1 = 7          #决策变量数a1 = [[1,1,1,1,0,0,0],[-2,1,-1,0,-1,1,0],[0,3,1,0,0,0,1]]#资源矩阵b1 = [4,1,9] #右端项c1 = [-3,0,1,0,0,-M,-M] #价值向量common(a1,b1,c1,m1,n1)
def test2():  print("第一章习题7 \n")#这一题是无界解,但我们不做这方面的检查,程序会报错m2 = 3     #约束条件数n2 =  8     #决策变量数a2 = [[1,1,1,-1,1,0,0,0],[-2,0,1,0,0,-1,1,0],[0,-2,-1,0,0,0,0,1]]#资源矩阵b2 = [6,2,0]    #右端项c2= [2,-1,2,0,-M,0,-M,0]                 #价值向量common(a2,b2,c2,m2,n2)
def test3():print("第一章习题7 \n")#这一题是无界解,但我们不做这方面的检查,程序会报错m2 = 3                           #约束条件数n2 =  8                           #决策变量数a2 = [[1,1,1,-1,1,0,0,0],[-2,0,1,0,0,-1,1,0],[0,-2,-1,0,0,0,0,1]]#资源矩阵b2 = [6,2,0]                        #右端项c2= [2,-1,2,0,-M,0,-M,0]                    #价值向量common(a2,b2,c2,m2,n2)
def test4():print("第一章ppt 例子11 \n")m=3n=9a=[[2,1,2,0,0,3,1,0,0],[0,2,1,0,1,0,0,1,0],[1,0,0,2,1,0,0,0,1]]b=[200,300,200]c=[-1,-1,-1,-1,-1,-1,-M,-M,-M]common(a,b,c,m,n)
def main():#global m,n    global MM=1000test()
main()

Lingo实现:

代码:

model:
sets:
row/1..4/:b;
col/1..2/:x;
value/1..2/:c;
links(row,col):a;
endsets
data:
a=2 21 24 00 4;
b=12 8 16 12;
c=2 3;
enddata
max=@sum(value(i):c(i) * x(i));
@for(row(i):@sum(col(j):a(i,j) * x(j))<=b(i));
@for(col(j):x(j)>=0);
end

运筹学实验_单纯形法相关推荐

  1. 运筹学实验_最短路径

    运筹学实验四 实验目的: 实验要求: 报告内容: Python实现: 代码: Lingo实现: 代码: 实验目的: python实现Dijkstra算法,lingo解决最短路问题 实验要求: 报告内容 ...

  2. 【运筹学】线性规划 单纯形法 案例二 ( 第一次迭代 | 矩阵变换 | 检验数计算 | 最优解判定 | 入基变量 | 出基变量 )

    文章目录 一.第一次迭代 : 进行行变换 二.第一次迭代 : 计算检验数 三.第一次迭代 : 最优解判定 四.第一次迭代 : 入基变量 五.第一次迭代 : 出基变量 [运筹学]线性规划 单纯形法 ( ...

  3. 【运筹学】线性规划 单纯形法 阶段总结 ( 初始基可行解 | 判定最优解 | 迭代 | 得到最优解 | 全流程详细解析 ) ★

    文章目录 一.线性规划示例 二.转化标准形式 三.查找初始基可行解 四.初始基可行解的最优解判定 五.第一次迭代 : 入基与出基变量选择 六.第一次迭代 : 方程组同解变换 七.第一次迭代 : 生成新 ...

  4. 一般单纯形法的matlab程序,实验报告(单纯形法的matlab程序)

    <实验报告(单纯形法的matlab程序)>由会员分享,可在线阅读,更多相关<实验报告(单纯形法的matlab程序)(5页珍藏版)>请在人人文库网上搜索. 1.实验一:线性规划单 ...

  5. 网络安全_密码学实验_非对称加密算法RSA

    网络安全_密码学实验_非对称加密算法RSA 一.实验环境 二.非对称加密RSA 1.理解RSA算法原理 2.加密过程 解密过程 一.实验环境 PyCharm 2019.2.4 (Professiona ...

  6. 迷宫_随机实验_边做边学深度强化学习:PyTorch程序设计实践(1)

    迷宫_随机实验_边做边学深度强化学习:PyTorch程序设计实践 0.相关文章 1.导入所使用的包 2. 定义迷宫 3.定义迷宫动作 4.策略参数θ转换为行动策略π 5.定义随机移动函数 6.定义使智 ...

  7. 网络安全_密码学实验_对称加密算法DES

    网络安全_密码学实验_对称密码非对称密码_加密算法DES RSA 一.实验环境 二.对称加密DES 1.理解DES算法原理 2.加密过程 3.解密过程 三.运行结果 一.实验环境 PyCharm 20 ...

  8. 密码学实验题_03.3_AES实验_利用Sage构建AES的S盒和逆S盒(基于阅读Sage数学库的Python代码)

    密码学实验题_03.3_AES实验_利用Sage构建AES的S盒和逆S盒(基于阅读Sage数学库的Python代码) 3.    AES实验 3)    (思考题)利用Sage构建AES的S盒和逆S盒 ...

  9. 大学物理实验_超声声速的测量_数据处理软件_源代码

    大学物理实验_超声声速的测量_数据处理软件_源代码1 前言 程序适用于大学物理实验_超声声速的测量的有关数据处理.本程序以NUAA大学物理实验中心所提供的的器材以及实验报告模板为基础编写. 代码(基于 ...

最新文章

  1. 如果你是Python初学者,就从这个开始
  2. 同样是持久化,竟然有这么大的差别!
  3. print arraylist 显示的不是内容_泛型数组列表 java.util.ArrayListlt;Egt;
  4. Py之qrcode:调用python的qrcode库两种方式生成二维码、带logo的二维码
  5. 【机器学习】从Few-shot Learning再次认识机器学习
  6. The response status was 0. Check out the W3C XMLHttpRequest Level 2 spec for
  7. .NET Core 2.1 正式发布
  8. for里面调用方法 vue_Vue源码阅读连载之Vue实例
  9. Hadoop集群搭建过程中ssh免密码登录(二)
  10. tolua unity 报错_Unity3D热更新之LuaFramework篇[01]--从零开始
  11. 树莓派安装DLNA实现流媒体服务器
  12. 小区物业管理系统设计思想+源码
  13. 股票语音播报软件 炒股语音实时播报
  14. C++实现华氏温度转为摄氏温度
  15. Gitlab权限说明
  16. 海康摄像机RTSP连接Opencv读取视频
  17. 市场热度持续提升!4D成像雷达进入「细分场景争夺战」
  18. Flight_Simulator(DHC-2‘Beaver’aircraft )
  19. mount卡住不动解决思路
  20. [报错] TypeError: run() argument after * must be an iterable, not int

热门文章

  1. 关于cronExpression的介绍
  2. 《FreeSWITCH: VoIP实战》:FreeSWITCH 初步
  3. debian 设置软件源
  4. sysbench mysql oltp_sysbench测试mysql oltp
  5. linux忽略abort信号,ARM Linux Data Abort 异常处理流程
  6. Python 四期爬虫三周优秀作业
  7. BigDecimal取整
  8. js生成唯一标识ID
  9. 判断水仙花数 php,php 判断 水仙花数
  10. zigbee芯片 - JN5169