Python 板


LINE

第一次寫Gurobi,遇到一些問題想請大大們幫忙看看 QQ 這個程式的目標是要最佳化撿料路徑,完整程式碼如下。 from gurobipy import* N = [0, 1, 2, 3, 4, 5] #料件在倉庫中的location(0是depot) S = [1] #共撿1個配置的機台 #Material list with location n I, K = multidict({1:11, 2:12, 3:13, 4:42, 5:41}) #距離列表 R1 = {(0,1): 3, (0,2): 6, (0,3): 5, (0,4):4, (0,5): 2,\ (1,2): 3, (1,3): 4, (1,4): 3, (1,5): 3,\ (2,3): 3, (2,4): 6, (2,5): 4, (3,4): 3, (3,5): 7, (4,5): 6} R = {} for i,j in R1: R[j,i]=R1[i,j] R[i,j]=R1[i,j] #把0,1 -> 1,0 #Capacity C = 10 #撿料的次數,可能由1~10 L = [l for l in range(1,60)] #BOM list(要撿的1個配置中,所需要的料件如下) BOM = {1:[11,12,13,42,41]} #S所需數量 S, D = multidict({1:2}) #Decision variable model = Model("Picking path") x = {} q = {} u = {} for l in L: for i in range(len(N)+1): q[i,l]=model.addVar(vtype="C", name="q(%s,%s)" %(i,l)) for j in range(len(N)+1): x[i,j,l]=model.addVar(vtype="B", name="x(%s,%s,%s)" %(i,j,l)) for l in L: for i in range(len(N)+1): u[i,l]=model.addVar(vtype="C", name="u(%s)" %i) model.update() #Constraints BigM = 10**6 for l in L: model.addConstr(quicksum(x[0,j,l] for j in N if j!=0)*BigM >= quicksum(q[j,l] for j in N), name="A.3") model.addConstr(quicksum(x[i,0,l] for i in N if i!=0)*BigM >= quicksum(q[j,l] for j in N), name="A.4") for j in N: model.addConstr(quicksum(x[i,j,l] for i in N if i!=j)\ -quicksum(x[j,v,l] for v in N if v!=j)==0, name="A.2") model.addConstr(quicksum(x[i,j,l] for i in N if i!=j)*BigM >= q[j,l], name="A.5") model.addConstr(q[j,l] <= C, name="A.6") for i in range(1,len(N)): for s in S: for k in K: model.addConstr(quicksum(q[i,l] for l in L)\ ==quicksum(D[s] for s in BOM if K[i] in BOM[s]), name="A.7") #subtour的限制式 for l in L: model.addConstr(u[0,l]==0) for i in range(len(N)+1): for j in N: if i!=j: model.addConstr(u[i,l]-u[j,l] + (len(N)+1)*x[i,j,l] <= (len(N)+1), name="A.8") #Objective model.setObjective(quicksum(R[i,j]*x[i,j,l] for i in N for j in N for l in L if i!=j), GRB.MINIMIZE) model.optimize() 目前跑出來的解,他會有2個小迴圈,0-5和5-0,以及1-2-3-4-1。 但我希望他是走1個迴圈,從0出發走完五個點後再回0。 x(0,5,33) 1.0 q(1,33) 2.0 x(1,2,33) 1.0 q(2,33) 2.0 x(2,3,33) 1.0 q(3,33) 2.0 x(3,4,33) 1.0 q(4,33) 2.0 x(4,1,33) 1.0 q(5,33) 2.0 x(5,0,33) 1.0 麻煩大大們幫忙看看我的限制式哪邊出了問題,感謝大家 > < --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.175.9.46 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1672557109.A.4F1.html
1F:推 jasonfghx: 出社會了沒辦法用groubi 01/09 16:12
2F:→ jasonfghx: 寫pulp還可以教 01/09 16:13
3F:推 illousion: 快速看一下問題應該在subtour 這個限制式數量是指數成 01/11 00:30
4F:→ illousion: 長 對於每個可能產生迴圈的點都要加一條去切掉 01/11 00:30
5F:→ illousion: 但是你的寫法 for l in L 這個是多項式寫法 不可能對 01/11 00:30
6F:→ illousion: 迴圈限制式處理方式都是一開始先不加 求解後從限制式裡 01/11 00:31
7F:→ illousion: 找 看哪一條違反了現在的解再加回去 01/11 00:31
8F:→ illousion: 這種作法叫 separation/delayed constraint generation 01/11 00:32
9F:→ illousion: 具體使用gurobi要用lazyconstraint callback 01/11 00:32
10F:→ illousion: 你要先懂數學原理 再懂callback寫法 才能處理這種問題 01/11 00:32







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP