美文网首页生物信息学与算法
1. 线性规划:单纯形法python代码

1. 线性规划:单纯形法python代码

作者: IE06 | 来源:发表于2018-07-18 22:20 被阅读16次

1. 模型

常见的线性规划模型如下:

2. 求解步骤

首先选取m个基变量,通过矩阵的线性变换,基变量可由非基变量表示:

目标函数z也可以完全由非基变量表示:

当达到最优解时,目标函数中所有的系数都应该≤0,这样非基变量等于0时,目标函数可以取到最大值。以此为目标,每次将最大的正系数max{ci}对应的非基变量替换为基变量,同时将min{bj/ai,j}对应的基变量替换为非基变量。这个进基/出基的过程称为pivoting。

3. python算法实现

这里假设原问题都是小于等于约束,这样添加松弛变量之后,问题一定有初始可行解;同时假设问题存在有限最优解。特殊情况将在下一节进行处理。

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()

data.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

运行后输出结果为:

x0=0.00

x1=1.00

x2=3.00

x3=0.00

x4=2.00

x5=0.00

x6=0.00

objective is 32.00

相关文章

  • 1. 线性规划:单纯形法python代码

    1. 模型 常见的线性规划模型如下: 2. 求解步骤 首先选取m个基变量,通过矩阵的线性变换,基变量可由非基变量表...

  • 线性规划与单纯形法

    《运筹学》系列文章: 初识运筹学 线性规划与单纯形法 番外篇: 从线性规划作业说起 现实的世界已经很复杂了,模型就...

  • 番外篇: 从线性规划作业说起

    《运筹学》系列文章: 初识运筹学 线性规划与单纯形法 番外篇: 从线性规划作业说起 实践是检验真理的唯一标准 导言...

  • 初识运筹学

    《运筹学》系列文章: 初识运筹学 线性规划与单纯形法 番外篇: 从线性规划作业说起 运筹帷幄之中,决胜千里之外。—...

  • 数学建模心得(1)

    1. 线性规划问题以及可以转换成线性规划问题。相应问题:机器工作安排,投资收益等。 python实现线性规划 - ...

  • 线性规划(一)——单纯形法

    问题介绍 单纯形法(simplex method)是求解线性规划问题一种通用算法,在实际生产生活中有广泛的应用。有...

  • 【数学建模】线性规划各种问题的Python调包方法

    关键词:Python、调包、线性规划、指派问题、运输问题、pulp、混合整数线性规划(MILP) 注:此文章是线性...

  • 线性规划与单纯形法

    对偶问题的基本性质 无界性:原问题为无界解,则其对偶问题无可行解 对偶定理:若原问题有最优解,那么对偶问题也有最优...

  • 线性规划之单纯形法

    转载请注明出处 http://www.jianshu.com/p/dd0761a2fdfd作者:@贰拾贰画生 单纯...

  • 线性规划 (二) 单纯形法

    问题描述   标准线性规划的容许集是凸多面体,有有限个极点,若有容许解,则必有基本容许解;若有最优解,则必有最优基...

网友评论

    本文标题:1. 线性规划:单纯形法python代码

    本文链接:https://www.haomeiwen.com/subject/uunapftx.html