我挑選Programming Challenges,找到了Yahtzee!問題,我將簡化:模擬退火和Yahtzee!
- 有13個計分類別
- 有13個軋輥通過播放器(包括播放)
- 每個輥必須適合在一個不同的類別
- 的目標是找出戲劇的最高分數(類別中的最佳放映位置);分數(玩)返回一個遊戲的分數
蠻力尋找最大的比賽得分需要13! (= 6,227,020,800)分數()調用。
我選擇模擬退火來找到接近最高分的東西,速度更快。雖然不確定,但它足夠好。我有5個芯片的13卷的列表,如:
((1,2,3,4,5) #1
(1,2,6,3,4),#2
...
(1,4,3,2,2) #13
)
和遊樂(1,5,6,7,2,3,4,8,9,10,13,12,11)
傳入得分()返回該劇中的排列得分。
如何選擇一個好的「鄰國」?對於隨機重啓,我可以簡單地選擇nos的隨機排列。 1-13,把它們放在一個矢量中,並對它們進行評分。在旅行商問題,這裏有一個good neighboring state的例子:「在一些特定的 置換的鄰居是 是例如由生產交換 一對相鄰 城市的排列」
我有簡單地交換兩個隨機向量位置,像這樣一種不好的預感:
(1,5,6,7, 2 , 3,4,8,9,10, 13, 12,11) # switch 2 and 13
(1,5,6,7, 13, 3,4,8,9,10, 2 , 12,11) # now score this one
但我沒有證據,不知道如何去選擇一個好的鄰居狀態。任何人有關於如何挑選好鄰國的想法?
儘管不知道規則,但你已經澄清了很多。如果關鍵點是找到兩個分數相當相似的展示位置,我可以解決它。謝謝! – ash