[討論] 三層迴圈(三維)寫法已回收

看板MATLAB作者 (Think before you leap)時間15年前 (2011/03/22 16:25), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/1
不好意思 因為模式的需要 由於以前非資工相關背景的關係,現在模式需要自己寫個程式(Mathematica) 我的主要問題 由於我現在的模式為三維的問題 維度可分為時間、商品一、商品二 帶入模式求最佳價格 ,這三種維度互相影響著價格 然後進行動態規畫求解, 所以我目前初步想法是寫三圈迴圈(之前相關文獻都是時間以及一種商品數量) 但是目前我初步寫完實在是不知道哪邊錯 或是整個觀念錯誤,我的程式碼在以下 希望有高手可以指點我一下~不好意思了 真的很緊急以及需要 如可以解決 小弟附上微薄P幣兩千 ---------------------------------------- timeint = 10; inven1 = 5; inven2 = 5; a = 0.4; b = 0.3; c = 0.2; v = Table[0, {i, timeint + 1}, {j, inven1 + 1}, {k, inven2 + 1}]; vv = Table[0, {i, timeint + 1}, {j, inven1 + 1}, {k, inven2 + 1}]; preti = Table[0, {i, timeint + 1}]; mt = Table[0.35, {i, timeint + 1}]; For[ti = 2, ti <= timeint + 1, ti = ti + 1, preti[[1]] = 0; For[in1 = inven1 + 1, in1 >= Max[(inven1 - timeint + ti), 2], in1 = in1 - 1, prein1 = Table[0, (j, inven1 + 1)]; prein1[[1]] = 0; For[in2 = inven2 + 1, in2 >= Max[(inven2 - timeint + ti), 2], in2 = in2 - 1, prein2 = Table[0, (k, inven2 + 1)]; prein2[[1]] = 0; revcdf = E^-(0.0045*(timeint + 1)/ti*p)^4; prob1 = Part[mt, ti]*a*revcdf; prob2 = Part[mt, ti]*b*revcdf; prob3 = Part[mt, ti]*c*revcdf; opt = FindMinimum[-((prob1*(p + Part[v, ti - 1, in1 - 1, in2])) + (prob2*(p + Part[v, ti - 1, in1, in2 - 1])) + (prob3*(2 p + Part[v, ti - 1, in1 - 1, in2 - 1])) + ((1 - prob1 - prob2 - prob3) Part[v, ti - 1, in1, in2])), {p, preti[[ti - 1]]}]; p = p /. opt[[2]]; prein1[[in1]] = p; prein2[[in2]] = p; Clear[p]; Part[v, ti, in1, in2] = -Part[opt, 1]; Part[vv, ti, in1, in2] = opt; ]; preti[[ti]] = Max[prein1]; Clear[prein1]; ]; preti[[ti]] = Max[prein2]; Clear[prein2]; ]; v // MatrixForm vv // MatrixForm preti opt 其中v為利潤集合 vv為價格 利潤集合 我先將時間初步分為10期 兩種商品數量各為5個 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.80.253

03/23 00:27, , 1F
prein preti 請問一下這是代表什麼意思?
03/23 00:27, 1F
文章代碼(AID): #1DY5poZZ (MATLAB)