[[ExcelEx]]
* Dynamic Programming by Excel without using a VBA macro. [#k8ac001e]
** Takashi Yamanoue, Fukuyama University, 26 Jan. 2016. [#o7597279]
- Finding out the minimal path from the start node to the goal node in a graph with labeled directed arcs.
- &ref(DP/dp-1-img.jpg,50%); &br; Fig. 1.
- The sheet... &ref(DP/dp-1.xlsx);
** Input [#f6744253]
- Node IDs. Each node ID is represented by a number. The start node ID should be 1. Node IDs should be sorted.
-- Each line represent one node.
- Previous nodes for each node. The maximum number of previous nodes should be 4. 
- Arc values from the previous nodes*. 1000 (represents infinite) is assigned when there is no corresponding arc. 
*** Format of the Input [#id6a75c1]
- In a line which corresponding to a node, the column A represents the Node ID.
- Column B to E represents previous nodes.
- Column F to I represents arc values from the previous nodes to this node.
*** Example (Fig. 1)[#k3d4854e]
- The cell A13 represents a node ID. The ID is one. So this node is the start node.
- The cell A19 represents the node, the ID of which is 7. Previous nodes of this node (7) are 4 and 5. They are shown by the cell B19 and C19. The arc value from the node 4 to this node(7) is 10, which is shown by the cell F19. The arc value from the node 5 to this node is 4, which is shown by the cell G19.
** Output [#g3e710b2]
- The minimal value from the start node to the goal node.
- The minimal path from the start node to the goal node.
** Key expressions [#s5d8268b]
*** J13 [#xe0335cd]
 =IF(B13<>0,VLOOKUP(B13,$A$13:$N$21,14)+F13,1000)
- Calculate the sum of, the arc value (this value) between this node and the previous node, and the value of the previous node which shows the minimal value from the start node to the previous node. 
- Copy this expression to the area of J13:M21. 
*** N13 [#d744f0cc]
 =IF(A13=1,0,MIN(J13:M13))
- Find out the minimal value from the previous nodes to this node.
- Copy this expression to the area of N13:N21.
*** O13 [#hd19795a]
 =IF(N13=0,0,MATCH(N13,J13:M13))
- Find out the previous arc which minimize the value. It is the selected arc. The arc is identified by the place between J*:M*. When the arc is in the column of J*, it is the 1st arc. When the arc is in the column M*, it is the 4th arc.
- Copy this expression to the area of O13:O21
*** P13 [#k0befaa9]
 =IF(O13=0,0,INDEX(B13:E13,1,O13))
- Find out the previous node (selected node) which minimizes the total value from the start node to this node.
- Copy this expression to the area of P13:P21
*** Q13 [#d88ce4e1]
 =IF(P13=0,"",IF(P13=1,"1-"&TEXT(A13,"#####"),VLOOKUP(P13,$A$13:$Q$21,17)&"-"&TEXT(A13,"#####")))
- Construct the minimal path from the start node to this node.
- Copy this expression to the area of Q13:Q21
** References [#lfb15418]
- Wikipedia Dynamic programming
-- https://en.wikipedia.org/wiki/Dynamic_programming
- Dynamic programming from an excel perspective.
-- https://www.researchgate.net/publication/262281816_Dynamic_programming_from_an_excel_perspective
- Writing a program by Excel
--  http://lecture.ecc.u-tokyo.ac.jp/~shagiya/excel.pdf
- Writing codes for a programming contest by excel
-- http://d.hatena.ne.jp/kita_yuta/20111220/1324405195
----
#counter


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS