日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

16、表上作业法

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 16、表上作业法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
# -*- coding: utf-8 -*- """ Created on Fri Mar 15 10:12:59 2019@author: zhangchaoyu """""" 這里特用來處理供給平衡的運輸問題 """def value_idex(e):return e[-1]def minimum_element(C, Br, Bc):X = [[0 for j in range(len(C[i]))] for i in range(len(C))]idexs = []for i in range(len(C)):for j in range(len(C[i])):idexs.append([i,j,C[i][j]])idexs.sort(key = value_idex)for i in range(len(idexs)):row = idexs[i][0]col = idexs[i][1]row_left = Br[row]for k in range(len(X[row])):if k != col:row_left -= X[row][k]col_left = Bc[col]for k in range(len(X)):if k != row:col_left -= X[k][col]X[row][col] = min(row_left,col_left)print("最小元素法:"+ str(sum([sum([C[i][j]*X[i][j] for j in range(len(X[i]))]) for i in range(len(X))])))return Xdef vogel_1(C, Br, Bc):row_used = []col_used = []X = [[0 for j in range(len(C[i]))] for i in range(len(C))]while True:row_can = []col_can = []for i in range(len(C)):if i not in row_used:row_can.append(i)for i in range(len(C[0])):if i not in col_used:col_can.append(i)if len(C) == len(row_used)+1:idex_row = row_can[0]for i in range(len(col_can)):col_left = Bc[col_can[i]]for j in range(len(X)):if j != idex_row:col_left -= X[j][col_can[i]]X[idex_row][col_can[i]] = col_leftbreakif len(C[0]) == len(col_used)+1:idex_col = col_can[0]for i in range(len(row_can)):row_left = Br[row_can[i]]for j in range(len(X[0])):if j != idex_col:row_left -= X[row_can[i]][j]X[row_can[i]][idex_col] = row_leftbreakDr = []Dc = []for i in range(len(row_can)):first = min(C[row_can[i]][col_can[0]],C[row_can[i]][col_can[1]])second = max(C[row_can[i]][col_can[0]],C[row_can[i]][col_can[1]]) for j in range(2,len(col_can)):if second > C[row_can[i]][col_can[j]]:second = C[row_can[i]][col_can[j]]first,second = min(first,second),max(first,second) Dr.append(second-first)for i in range(len(col_can)):first = min(C[row_can[0]][col_can[i]],C[row_can[1]][col_can[i]])second = max(C[row_can[0]][col_can[i]],C[row_can[1]][col_can[i]]) for j in range(2,len(row_can)):if second > C[row_can[j]][col_can[i]]:second = C[row_can[j]][col_can[i]]first,second = min(first,second),max(first,second) Dc.append(second-first)row_max = Dr[0]row_idex_max = row_can[0]for i in range(1,len(Dr)):if row_max < Dr[i]:row_max = Dr[i]row_idex_max = row_can[i]col_max = Dc[0]col_idex_max = col_can[0]for i in range(1,len(Dc)):if col_max < Dc[i]:col_max = Dc[i]col_idex_max = col_can[i]if col_max > row_max:idex_row = row_can[0]for i in range(1,len(row_can)):if C[idex_row][col_idex_max] > C[row_can[i]][col_idex_max]:idex_row = row_can[i]row_left = Br[idex_row]for i in range(len(X[idex_row])):if i != col_idex_max:row_left -= X[idex_row][i]col_left = Bc[col_idex_max]for i in range(len(X)):if i != idex_row:col_left -= X[i][col_idex_max]if row_left <= col_left:X[idex_row][col_idex_max] = row_leftrow_used.append(idex_row)else:X[idex_row][col_idex_max] = col_leftcol_used.append(col_idex_max)else:idex_col = col_can[0]for i in range(1,len(col_can)):if C[row_idex_max][idex_col] > C[row_idex_max][col_can[i]]:idex_col = col_can[i]row_left = Br[row_idex_max]for i in range(len(X[row_idex_max])):if i != idex_col:row_left -= X[row_idex_max][i]col_left = Bc[idex_col]for i in range(len(X)):if i != row_idex_max:col_left -= X[i][idex_col]if row_left <= col_left:X[row_idex_max][idex_col] = row_leftrow_used.append(row_idex_max)else:X[row_idex_max][idex_col] = col_leftcol_used.append(idex_col)print(X)print(X)print("vogel法:"+ str(sum([sum([C[i][j]*X[i][j] for j in range(len(X[i]))]) for i in range(len(X))]))) return Xdef vogel_2(C, Br, Bc):idexs = []for i in range(len(C)):for j in range(len(C[i])):dis_row = -1for k in range(len(C[i])):if C[i][k] - C[i][j] >= 0 and k != j:if dis_row == -1:dis_row = C[i][k] - C[i][j]elif dis_row > C[i][k] - C[i][j]:dis_row = C[i][k] - C[i][j]dis_col = -1for k in range(len(C)):if C[k][j] - C[i][j] >= 0 and k != i:if dis_col == -1:dis_col = C[k][j] - C[i][j]elif dis_col > C[k][j] - C[i][j]:dis_col = C[k][j] - C[i][j]if dis_row >= dis_col:flag = 1else:flag = 2idexs.append([i,j,C[i][j],flag,max(dis_row,dis_col)])idexs.sort(key = value_idex, reverse = True)X = [[0 for j in range(len(C[i]))] for i in range(len(C))]for i in range(len(idexs)):row = idexs[i][0]col = idexs[i][1]row_left = Br[row]for k in range(len(X[row])):if k != col:row_left -= X[row][k]col_left = Bc[col]for k in range(len(X)):if k != row:col_left -= X[k][col]X[row][col] = min(row_left,col_left)print("最小元素法:"+ str(sum([sum([C[i][j]*X[i][j] for j in range(len(X[i]))]) for i in range(len(X))])))return Xdef examples_test(examples, test):result1 = []result2 = []for i in range(len(examples)):C = examples[i][0]Br = examples[i][1]Bc = examples[i][2]X1 = minimum_element(C, Br, Bc)result1.append(sum([sum([C[i][j]*X1[i][j] for j in range(len(X1[i]))]) for i in range(len(X1))]))X2 = vogel_1(C, Br, Bc)result2.append(sum([sum([C[i][j]*X2[i][j] for j in range(len(X1[i]))]) for i in range(len(X2))]))for i in range(len(result1)):print(str(result1[i]) + " " + str(result2[i]) + " " + str(test[i]))examples = [] examples.append([[[3,11,3,10],[1,9,2,8],[7,4,10,5]],[7,4,9],[3,6,5,6]]) examples.append([[[10.8,1e10,1e10,1e10],[10.8,11.1,1e10,1e10],[10.8,11.1,11,1e10],[10.8,11.1,11,11.3],[10.8,11.1,11,11.3]],[10,15,25,20,30],[25,35,30,10]]) examples.append([[[10.8,1e10,1e10,1e10],[10.95,11.1,1e10,1e10],[11.1,11.25,11,1e10],[11.25,11.4,11.15,11.3],[10.8,11.1,11,11.3]],[10,15,25,20,30],[25,35,30,10]]) examples.append([[[2,3,5],[14,13,17],[7,8,3]],[2,2,1],[1,1,3]]) examples.append([[[2,15,13,4],[10,4,14,15],[9,14,16,13],[7,8,11,9]],[1,1,1,1],[1,1,1,1]])test = [85, 1101.5, 1103.75, 40, 28] #檢驗所有例子和結果 examples_test(examples, test)C = examples[-1][0] Br = examples[-1][1] Bc = examples[-1][2]X0 = minimum_element(C, Br, Bc) X1= vogel_1(C, Br, Bc)

?

總結

以上是生活随笔為你收集整理的16、表上作业法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。