数学建模——运输问题(Python实现)

 

 

(5)表上作业法求解运输问题——解的改进

 

(6)产销不平衡的运输问题

(7)有转运的运输问题

     3、案例分析1——沃格尔法(寻找初始基可行解)


(1)案例分析

 

(2)Python实现

#运输问题求解:使用Vogel逼近法寻找初始基本可行解

import numpy as np

import copy

import pandas as pd

def main():

mat=pd.read_csv(‘表上作业法求解运输问题.csv’,header=None).values

#mat = pd.read_excel(‘表上作业法求解运输问题.xlsx’, header=None).values

#c=np.array([[4,12,4,11],[2,10,3,9],[8,5,11,6]]) #成本矩阵

#a=np.array([16,10,22]) #供给量

#b=np.array([8,14,12,14]) #需求量

[c,x]=TP_vogel(mat)

#[c,x]=TP_vogel([c,a,b])

def TP_split_matrix(mat): #运输分割矩阵

c=mat[:-1,:-1]

a=mat[:-1,-1]

b=mat[-1,:-1]

return (c,a,b)

def TP_vogel(var): #Vogel法代码,变量var可以是以numpy.ndarray保存的运输表,或以tuple或list保存的(成本矩阵,供给向量,需求向量)

import numpy

typevar1=type(var)==numpy.ndarray

typevar2=type(var)==tuple

typevar3=type(var)==list

if typevar1False and typevar2False and typevar3==False:

print(‘>>>非法变量<<<’)

(cost,x)=(None,None)

else:

if typevar1==True:

[c,a,b]=TP_split_matrix(var)

elif typevar2True or typevar3True:

[c,a,b]=var

cost=copy.deepcopy©

x=np.zeros(c.shape)

M=pow(10,9)

for factor in c.reshape(1,-1)[0]:

while int(factor)!=M:

if np.all(c==M):

break

else:

print(‘c:\n’,c)

#获取行/列最小值数组

row_mini1=[]

row_mini2=[]

for row in range(c.shape[0]):

Row=list(c[row,:])

row_min=min(Row)

row_mini1.append(row_min)

Row.remove(row_min)

row_2nd_min=min(Row)

row_mini2.append(row_2nd_min)

#print(row_mini1,‘\n’,row_mini2)

r_pun=[row_mini2[i]-row_mini1[i] for i in range(len(row_mini1))]

print(‘行罚数:’,r_pun)

#计算列罚数

col_mini1=[]

col_mini2=[]

for col in range(c.shape[1]):

Col=list(c[

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值