Netlogo 模拟退火
早上或下午好,
我今天在这里,因为我一直在试图编写有关Netlogo物种的模拟退火算法。 我试图使用SA的物种具有自己的二进制组,该集合是一个16位数字集,从开始时随机分组,集合中的每个数字代表一个动作/增强,例如,16位数中的第一个位置集合是 + 2速增强。 但是,我已经用这种算法来回回去,但运气不多,目前,我将模拟温度设置为10,我试图随着时间的推移,即使在每个过程中,我都在尝试降低温度我预测的所有物种的最佳配置将全部打开,但我想真正看到这种情况。
但是,发生的是算法直接跳到温度0,我可以理解为什么是,但我不知道随着时间的推移降低温度的更好方法。另外,我正在尝试评估健身分数,如果比以前的分数更好,那么保持更好的分数,但这也是一个问题。
我不知道这个问题还是问题是可以理解的,但是如果不是可以理解的,请提出任何有助于您了解我当前问题的问题。
谢谢
内森·唐,
这是我目前拥有的
ask fish 810 [
actions ; Actions have been defined where i have corresponded each value as an action
set color red
set tempreture 10
set tempreture tempreture * (1 - cooling_rate / 100)
if tempreture = 10 [
set binary replace-item random 16 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 9 [
set binary replace-item random 14 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 8 [
set binary replace-item random 12 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 7 [
set binary replace-item random 10 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 6 [
set binary replace-item random 8 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 5 [
set binary replace-item random 6 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 4 [
set binary replace-item random 4 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 3 [
set binary replace-item random 3 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 2 [
set binary replace-item random 2 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 1 [
set binary replace-item random 1 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 0 [
Show fitness_score
stop
]
]
show tempreture
; tick
end```
Good morning or Afternoon
I am here today as I have been trying to write my own simulated annealing algorithm regarding a species in Netlogo.
The species I am trying to use an SA on has its own binary set which is a 16 digits binary set that is randomized from the start, each number in the set represents an action/enhancement, for example, the first placement in the 16 digit set is a + 2-speed enhancement.
However I have been back and forth with this algorithm and have not had much luck, currently, I have set the temperature of the simulation to 10 and i have tried to decrease the temperature over time and even on each procedure, I am trying to find the optimal configuration of the species which I predict will be all 1s turned on but I want to actually see that happen.
What is happening though is the algorithm jumps straight to temperature 0, I can understand why that is but I don't know a better way to decrement the temperature over time. Also, I am trying to evaluate the fitness score and if it is better than the previous score then keep the better one but this has also been quite a problem.
I don't know whether this question or problem is understandable but if it is not please ask any questions which might help you understand my current issue.
Thanks
Nathan Don
This is what I have currently
ask fish 810 [
actions ; Actions have been defined where i have corresponded each value as an action
set color red
set tempreture 10
set tempreture tempreture * (1 - cooling_rate / 100)
if tempreture = 10 [
set binary replace-item random 16 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 9 [
set binary replace-item random 14 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 8 [
set binary replace-item random 12 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 7 [
set binary replace-item random 10 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 6 [
set binary replace-item random 8 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 5 [
set binary replace-item random 6 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 4 [
set binary replace-item random 4 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 3 [
set binary replace-item random 3 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 2 [
set binary replace-item random 2 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 1 [
set binary replace-item random 1 binary random 2
;set tempreture tempreture - 1
]
if tempreture = 0 [
Show fitness_score
stop
]
]
show tempreture
; tick
end```
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
从我的看来,这只是一个拼写错误。
您将
温度
设置为10,但是在其余代码中,您使用的是tempreture
。编辑:
我在代码中发现的还有一些问题:
您从温度开始,并立即减少。这意味着如果tempreture = 10 条件
,就无法实现
每次鱼执行此过程时,tempreture都会恢复到10。 。
您每次都会让温度通过一个派系,但是二进制组的变化只有在温度达到整数时才会发生。也许您想在传递里程碑时触发条件,而不仅仅是到达它的准确时?沿着这些线可以适用于此
From what I see, it is simply a spelling error.
You set
temperature
to 10 but in the rest of your code you are usingtempreture
.Edit:
Some more problems I found with the code:
You start with temperature at 10 and immediately let it decrease. That means that it would be impossible to ever fulfill the
if tempreture = 10
conditionEvery time the fish executes this procedure, tempreture is set back to 10. That means you will never reach the lower ones.
You let the temperature by a certain faction each time but the changes to your binary set only happen when temperature reaches a whole number. Maybe you want to trigger the condition when the milestone is passed, not just when it is reached exactly? Something along these lines would work for that