simplex算法的代码实现

news2025/1/24 5:07:14
def  pivot(N, B, A, b, c, v, l, e):
    '''
    N对应非基本元变量下标,B对应基本元变量下标,A对应非基本元在约束方程组中的系数相反数形成的矩阵,
    b对应约束条件中小于等于号右边的数值集合,c对应目标函数中变量系数形成的集合,v对应当前目标函数的取值,
    l对应转出变量下标在B中的位置,e对应转入变量下标在N中的位置
    '''
    b[l] = b[l] / A[l][e]  #将给定等式的常数和除了传入变量意外的其他变量对应的系数除以转入变量对应的系数
    for j in range(len(A[0])):
        if j == e:
            continue
        A[l][j] = A[l][j] / A[l][e]
    A[l][e] = 1 / A[l][e]  #这是等号左边变量转入右边后对应的系数
    for i in range(len(A)):  #改变其他等式常数和变量系数
        if i == l:
            continue
        b[i] = b[i] - A[i][e] * b[l]
        for j in range(len(A[0])): 
            if j == e:
                continue
            A[i][j] = A[i][j] - A[i][e] * A[l][j]
        A[i][e] = -A[i][e] * A[l][e]  #由于A中元素对应约束条件中变量系数的相反数,因此A中元素相乘后符号会负负得正,因此前面要加个负号
    v = v + c[e] * b[l]  #变量替换后目标修改目标函数的值
    for j in range(len(c)):  #目标函数中转出变量替换成转入变量后修改相关xishu7
        if j == e:
            continue
        c[j] = c[j] - c[e] * A[l][j]
    c[e] =  -c[e] * A[l][e]
    leaving_variable_index = B[l]
    entering_variable_index = N[e]
    B[l] = entering_variable_index
    N[e] = leaving_variable_index
    return  (N, B, A, b, c, v)
A = [
    [1, 1, 3],
    [2, 2, 5],
    [4, 1, 2]
    ]
B = [4, 5, 6]
N = [1, 2, 3]
b = [30, 24, 36]
c = [3, 1, 2]
v = 0
l = 2 
e = 0
(N, B, A, b, c, v)=pivot(N, B, A, b, c,v, l, e)
print("index of no basic variables after pivoting: ", N)
print("index of basic variables after pivoting: ", B)
print("coefficients of no basic variables after pivoting: ", A)
print("object function coefficients after pivoting is : ", c)
print("object function value after pivoting is : ", v)

对于如上的代码,通过一个具体的例子来说明这段代码的运行逻辑,如果假设要解决的线性规划的系统如下:

添加图片注释,不超过 140 字(可选)

将该线性规划系统经过转换之后变成标准型的形式:

添加图片注释,不超过 140 字(可选)

对于此时的基本元的下标是4,5,6,因此变量B所对应的内容是B={4,5,6},同理非基本元的下标是1,2,3,在约束条件中非基本元对应的系数相反数集合为

添加图片注释,不超过 140 字(可选)

同时约束条件中常量集合为b={30,24,26},在目标函数中变量对应系数集合为e={3,1,2},代码中输入变量v对应目标函数当前取值结果,根绝simplex算法会把所有非基本元取值为0,所以此时目标函数对应的结果为0。

根据simplex算法,从目标函数中选择一个系数为正的变量,因此可以选择变量x1,然后再保持变量大于等于0的前提下增加它的值,看那个约束条件让他的增加值是最少的。

最后一个约束条件让x1的增加值最少,选择最后一个约束条件进行下一步变换,转入变量对应x1,转出变量对应x6,而x1在三个约束条件中对应的系数处于矩阵A的第一列,代码含中的输入变量x1=0,变量x6下标对应B[2],因此e=2。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1495276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nodejs版本管理工具nvm安装和环境变量配置

1、下载nvm.exe https://github.com/coreybutler/nvm-windows/releases2、安装 1.在D盘根目录新建一个dev文件夹,在dev里面再新建一个nodejs。 2.双击下载好的nvm.exe 修改文件路径,且路径中不能有中文 3.安装完成后在D:\dev\nvm打开settings.txt&…

C++写食堂菜品管理系统

说明:本博文来自CSDN-问答板块,题主提问。 需要:学校拟开发一套食堂菜品管理系统,以便对菜品和同学们的评价进行管理,其中包含如下信息: 商户:商户名称、柜面位置、电话…… 菜品:菜品编号、菜品名称、价格、所属商户…… 学生:注册账号、昵称、电话…… 食堂里的商户…

因果学习篇(2)-Causal Attention for Vision-Language Tasks(文献阅读)

Causal Attention for Vision-Language Tasks 引言 这篇论文是南洋理工大学和澳大利亚莫纳什大学联合发表自2021年的CVPR顶会上的一篇文献,在当前流行的注意力机制中增加了因果推理算法,提出了一种新的注意力机制:因果注意力(CATT)&#xff…

【四】【SQL Server】如何运用SQL Server中查询设计器通关数据库期末查询大题

数据库学生选择1122 数据库展示 course表展示 SC表展示 student表展示 数据库学生选课1122_3 第十一题 第十二题 第十三题 第十四题 第十五题 数据库学生选课1122_4 第十六题 第十七题 第十八题 第十九题 第二十题 数据库学生选课1122_5 第二十一题 第二十二题 结尾 最后&…

Snap7 PLC使用

文章目录 前言一、Snap7是什么?1. 官网下载2.下载后找到关键lib和.h文件 二、使用步骤1.新建一个Qt的工程2.读入数据 总结 前言 提示:这里可以添加本文要记录的大概内容: 项目需要: 提示:以下是本篇文章正文内容&…

JavaSE(上)-Day1

JavaSE(上)-Day1 CMD终端的常见命令配置环境变量的作用?高级记事本安装(略,正版收费)各个语言的运行方式区别为什么Java可以实现跨平台?JDK和JRE的认识JDK是什么?由什么组成JRE是什么?由什么组…

《Balanced Meta-Softmax for Long-Tailed Visual Recognition》阅读笔记

论文标题 《Balanced Meta-Softmax for Long-Tailed Visual Recognition》 用于长尾视觉识别的平衡元-Softmax 作者 Jiawei Ren、Cunjun Yu、Shunan Sheng、Xiao Ma、Haiyu Zhao、Shuai Yi 和 Hongsheng Li 商汤科技、南洋理工大学、新加坡国立大学和香港中文大学多媒体实…

[ 云计算 | AWS ] ChatGPT 竞争对手 Claude 3 上线亚马逊云,实测表现超预期

文章目录 一、前言二、Claude 3 介绍以及相关测试细节三、在亚马逊云科技上体验 Claude 33.1 在 Amazon Bedrock 服务中配置 Claude 33.2 为聊天配置使用 Claude 3 模型3.3 Caude 3 Sonet 聊天体验 四、文末总结五、参考文献 一、前言 3月4号,Anthropic 发布了号称…

jmeter请求接口问题小记

将请求链接复制下来,然后将其放在http的请求中,可以有两种写法,详见附件

Python算法100例-3.6 自守数

1.问题描述2.问题分析3.算法设计4.求给定数的位数5.分离给定数中的最后几位6.确定程序框架7.完整的程序 1.问题描述 自守数是指一个数的平方的尾数等于该数自身的自然数。例如, 5 2 25 , 2 5 2 625 , 7 6 2 5776 &#xff0c…

微信小程序怎么盈利?探索微信小程序的盈利途径与建设流程

微信小程序自推出以来,凭借其无需下载安装、即用即走的特点,在移动互联网领域迅速占据了重要地位。商家和开发者们纷纷投入其中,希望借助这一平台实现商业价值的转化。那么,微信小程序是如何为开发者和商家带来盈利的呢&#xff1…

java微服务面试题及答案,java技术栈面试题

前言 原来,一瞬间,一句话,真的可以改变一个人的命运。 说一个前几年一个热门话题:“是否应该跳出舒适圈。” 一时间,这个话题便引发众人议论: 支持方:愿意挑战不擅长领域的人,勇气…

JS 实现AES方式加密数据实现示例

简介:全称高级加密标准(英文名称:Advanced Encryption Standard),在密码学中又称 Rijndael 加密法,由美国国家标准与技术研究院 (NIST)于 2001 年发布,并在 2002 年成为有…

APS(高级计划与调度系统)难度超高,ERP在它面前就是弟弟。

一、APS定义和功能模块 APS系统是Advanced Planning and Scheduling System(高级计划与调度系统)的缩写。它是一种计划和调度管理软件系统,旨在帮助企业优化生产计划和资源调度,提高生产效率和响应能力。 APS系统利用先进的算法和…

Android已死,备战三个月

1.写在前面 Google在上周发布了Android Studio 3.0的正式版本,周四早晨在上班的地铁上就看到群里在沸沸扬扬的讨论关于3.0版本的各种坑,啊,不对,各种特 点击领取完整开源项目《安卓学习笔记总结最新移动架构视频大厂安卓面试真题…

安防视频监控云平台EasyCVR v3.5支持批量设置录像计划时间段

安防视频监控云平台EasyCVR支持多协议接入、可分发多格式的视频流,平台支持高清视频的接入、管理、共享,支持7*24小时不间断监控。视频监控管理平台EasyCVR可提供实时远程视频监控、录像、回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储…

Mac Pro 突然不能双击打开文件夹

当Mac Pro 突然不能双击打开文件夹 不防右击看看这儿 有没有勾选 如果勾选就会在打开的瞬间 闪退关掉文件夹

大唐杯学习笔记:Day6

1.1小区选择 一、概述 1.UE在RRC_IDLE和RRC——INACTIVATE状态下进行的过程; 2.UE首先需要完成PLMN的选择,在已选择的PLMN上寻找合适的小区,获取合适的服务,监听控制信道,这个过程即小区选择过程; 3.根据小区重选准则,UE寻找其他更适合的小区进行小区…

Sqli-labs靶场第13关详解[Sqli-labs-less-13]

Sqli-labs-Less-13 #手工注入 post传参了 根据题目看,像一个登录页面,尝试使用布尔型盲注测试能否登录网站 1. Username输入a 测试是否会有报错,burp抓包 报错:syntax to use near a) and password() LIMIT 0,1 at line 1 分…