我正在努力製作netlogo中的程序,它可以將不同的海龜組合編成兩套。例如, ;系統中共有10只烏龜[0 1 2 3 4 5 6 7 8 9],我想將這些烏龜的不同組合製作成兩套。 {[0 6 7 8] [1 2 3 4 5 9]},{[2 3 6 8 9] [0 1 4 5 7]} .......等等。兩套海龜的不同組合在netlogo中
任何幫助將非常感激。
我正在努力製作netlogo中的程序,它可以將不同的海龜組合編成兩套。例如, ;系統中共有10只烏龜[0 1 2 3 4 5 6 7 8 9],我想將這些烏龜的不同組合製作成兩套。 {[0 6 7 8] [1 2 3 4 5 9]},{[2 3 6 8 9] [0 1 4 5 7]} .......等等。兩套海龜的不同組合在netlogo中
任何幫助將非常感激。
這可能是你想要的。以下代碼通過對列表進行排序並刪除重複項(即刪除[[1 2] [3]]和[[2 1] [3]]來刪除重複項,因爲它會對第一個列表進行排序,然後將[1 2 ]這將導致匹配)。砍掉一個元素並將其插入左側子列表並遞歸。
您可以想象列表中的每個數字都與誰對應。所以你可以做
let alist [who] of turtles
讓我知道如果您有任何疑問
to-report permutate-sublist [added-whos remaining-whos]
ifelse length remaining-whos = 1
[
report (list (list (sort added-whos) (sort remaining-whos)))
]
[
let result (list)
foreach (sort remaining-whos)
[
let x ?
let new-whos (sentence added-whos x)
let new-remaining-whos (remove x remaining-whos)
set result (sentence (list (list (sort new-whos) (sort new-remaining-whos))) result)
set result (remove-duplicates (sentence (permutate-sublist new-whos new-remaining-whos) result))
]
report result
]
end
這是當你打印出來的結果
let alist (list 1 2 3)
show permutate-sublist (list) alist
[[[2 3] [1]]
[[1 3] [2]]
[[3] [1 2]]
[[1 2] [3]]
[[2] [1 3]]
[[1] [2 3]]]
Thaks。如果我有任何問題,我會通知你。 – user2293224
當系統中有15個或15個以上的海龜時,上述方法看起來不錯。程序暫停或計算不可處理。 – user2293224
正確。由於您正在解決的問題需要組合答案,因此您無法用15個或更多的海龜解決您的問題。如果你限制了你的問題,你可能會創建一個更具計算能力的解決方案。請注意它需要用來存儲所有分區的內存量......如果它使用大量內存,程序將運行緩慢。 – mattsap
@amaretto我一直想會發生什麼修改用於組合和排列的現有netlogo代碼的代碼。但沒有運氣。 – user2293224
這還不清楚。如果只有3只烏龜,是否需要所有可能的組合:{[0 1] [2]}和{[0 2] [1]}和{[0] [1 2]}?這對於NetLogo來說是件奇怪的事情。或者你只是想讓它隨機生成這些集合中的一個? – JenB
下面是其他語言的一些實現:http://stackoverflow.com/questions/29656649/split-a-list-into-two-sublists-in-all-possible-ways Netlogo可能很難實現這一點。你在用什麼?如果將它用作模擬的輸入,則可以使用現有代碼將解決方案寫入另一種語言的文件,並在仿真中讀取它。否則,只需寫一個netlogo適配。 – mattsap