表上作业法求解运输问题----python生成初始解

提示:本文主要是关于python的实现,不纠结于原理部分

目录

文章目录

前言

一、理论部分

1.最小元素法

2.沃格尔(Vogel)法

二、最小元素法实现

1.数据准备

2.代码主体部分

三、沃格尔(Vogel)法代码实现

1.数据准备

2.代码主体部分

四、完整代码

总结



前言

运输问题是一种线性规划模型,如果使用单纯形法,那么对每个约束都需要引入一个人工变量,因此为更好的求解运输问题,需要有一种新方法。

表上作业法是求解运输问题的一种简便而有效的方法,其整体的迭代步骤为:得到初始解;对解进行判定,若不是最优解,则改进;再判定;直到得到运输问题的最优解为止。


提示:以下是本篇文章正文内容,下面案例可供参考

一、理论部分

得到初始可行解有两种常用的方法:最小元素法和沃格尔(Vogel)法。

1.最小元素法

最小元素法是基于优先满足单位运价最小的供销业务,是一种贪心思想。

2.沃格尔(Vogel)法

沃格尔法可以简单总结为找到最大罚数的行(列),在该行(列)种找到最小的运价,满足该运价对应的供销关系,不断迭代。

上面只是简单介绍一下两个方法的思想,要想明白可以找找相关资料,个人感觉原理很简单。下面就直接进入正题。Coding!!!

二、最小元素法实现

1.数据准备

产量、销量、产地和销地间的成本矩阵、设置一个极大数、初始化初始解。

import numpy as np
import copy
supplyNum=3           #供应商数量
demandNum=4           #需求商数量
A=np.array([16,10,22])           #产量
B=np.array([8,14,12,14])         #销量
C=np.array([[4,12,4,11],[2,10,3,9],[8,5,11,6]])       #成本
X=np.zeros((supplyNum,demandNum))         #初始解
c=copy.deepcopy(C)
maxNumber=10000       #极大数

2.代码主体部分

这里的python实现思想是:

1、找到最小运价的索引;

2、判断该索引对应的产地的产量和销地的销量大小关系,以此确定该索引下的运输量;

3、将该索引对应的剩余产量、剩余销量数据更新,并且将已经满足运输条件的行(列)成本全部提高为一个极大数(该操作替换表上作业法里面的删除操作);

4、条件判定,若所有的成本都已经不小于这个极大数,则跳出循环,否则跳入步骤1。

代码如下:

def pivot(A,B,c,X):
    index=np.where(c==np.min(c))     #寻找最小值的索引
    minIndex=(index[0][0],index[1][0])     #确定最小值的索引
    #确定应该优先分配的量,并且改变价格
    if A[index[0][0]]>B[index[1][0]]:
        X[minIndex]=B[index[1][0]]
        c[:,index[1][0]]=maxNumber       #改变价格
        A[index[0][0
  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值