Муравьиный алгоритм. Задача Коммивояджера. NetLogo

Прошу помощи с программой в NetLogo. Делаю все по мануалу, но из-за того, что совершенно новый для меня язык, реализовать задачу сложновато. К сожалению pdf ссылку не могу скинуть на мануал, так как он в закрытом доступе, поэтому 7 фото мануала расположены в самом низу, остальные вам надо будет взять у меня, написав мне (к сожалению новым пользователям вроде меня нельзя вставлять много ссылок) Так же я написал код, который не могу отладить уже 3 день из-за не понятных мне ошибок. Буду очень рад, если кто-то откликнется!

breed [nodes node]
breed [ants ant]

links-own [len ph visits best?]

;len - длина ребра
;ph - уровень феромона
;visits - кол-во муравьев, прошедших по этому ребру на текущей итерации алгоритма
;best? - логическое значение, показывающее, входит ли данное ребро в текущий оптимальный маршрут

globals [best-len sel rnd max-ph next sum-weights] ;

;best-len - длина лучшего марштура
;sel
;rnd

ants-own [current to-visit visited-links path-len]

;current - текущая вершина графа
;to-visit - список вершин
;visited-links - набор связей
;path-len - длина текущего маршрута

to setup
  clear-all
  ask patches [set pcolor white]
  create-nodes graph-size
  ask nodes [setup-node]
  create-ants ants-number

  ask nodes [
    create-links-with other nodes [
      set color blue
      set ph 1
      set len link-length / max-pxcor
    ]
  ]

   ask ants [
    set hidden? true
  ]

  reset-ticks
end

to setup-node
  set shape "circle"
  set size 1
  set color orange

  if layout = "random"[
  setxy random-xcor random-ycor
  ]
  if layout = "circle"[
    let a 360 / graph-size * who
    let r max-pxcor - 1
    setxy (r * sin a) (r * cos a)
  ]
  if layout = "grid"[
    let n ceiling sqrt graph-size
    let d (2 * max-pxcor - 2) / (n - 1)
    set xcor min-pxcor + 1 + d * (who mod n)
    set ycor min-pycor + 1 + d * floor (who / n)
  ]
end

;Муравьиный алгоритм

to go
  ask ants[
    set current 0
    ;set to-visit list (graph-size) (range 1 graph-size)
    set to-visit (range 1 graph-size)
    set visited-links no-links
    set path-len 0
   ]

  ask links [
    set visits 0
  ]

  repeat graph-size [ask ants [move-ant]]

  ask ants [
    let dt Q / path-len / graph-size
    ask visited-links [set ph ph + dt]
    check-best

    set max-ph max visited-links
    ask visited-links [
      set ph ph / max-ph
      color-link
    ]
  ]

;  ask links [
;    ;set max-ph max ph
;    set ph ph / max-ph
;    color-link
;  ]

  reset-timer
  ;error "Stop here!"
end


to move-ant
  choose-next 
  ;set next nodes choose-next ;;;;;;;;;
  set to-visit remove next to-visit 
  let l [len and ph] of current ;one-of
  set visited-links visited-links + l


  ask links[
    set visits l + 1
  ]

  set path-len [len] of l
  set next current
end

to choose-next
  let weights map get-weight to-visit
  set rnd random sum weights
  set sel 0

  (foreach to-visit weights select)

  show sel

;  if to-visit = 0[
;
;  ]
end

to-report get-weight [c]
  let l link current c
  report  [(ph ^ alpha) / (len ^ beta)] of l
end

to select [c w]
  if (rnd > 0) and (rnd < w) [
    set sel c
    set rnd rnd - w
  ]
end

to check-best
  let best-ant min path-len
  let bp path-len

  if ticks = 0 or bp < best-len [
    set best-len bp
    ask links [set visits best? = false]
    ask visited-links [set best-ant best? = true]
  ]
end

to color-link
  if show-best? = true [
    set thickness 0.25
    set color green
    set hidden?  not best?
  ]
  if show-best? = false[
    set hidden? visits = 0 and ph < 0.1
    set thickness 0.5 * visits / ants-number
    set color scale-color blue ph 2 0
  ]
end
  1. https://wampi.ru/image/Rjh5tOk
  2. https://wampi.ru/image/Rjh5Xdt
  3. https://wampi.ru/image/Rjh59u7
  4. https://wampi.ru/image/Rjh6dUY
  5. https://wampi.ru/image/Rjh66z8
  6. https://wampi.ru/image/Rjh6YWr
  7. https://wampi.ru/image/Rjh6My4

Ответы (0 шт):