2016-05-27 3 views
1

Я хочу сортировать черепах в соответствии со своими значениями "var". Мой код:Tie breaker in Netlogo процесс сортировки

globals [liste] 
turtles-own [var] 
to setup 
clear-all 
create-turtles 5 [setxy (random 5) (random 5)] 
ask turtle 0 [set var 1] 
ask turtle 1 [set var 1] 
ask turtle 2 [set var 1] 
ask turtle 3 [set var 2] 
ask turtle 4 [set var 3] 

set liste [who] of turtles 
set liste sort-by [([var] of turtle ?1) < ([var] of turtle ?2)] liste 
show liste 

end 

Этот код работает, и я получить следующие результаты в течение нескольких exceutions

Наблюдатель: [0 2 1 3 4]

Наблюдатель: [1 0 2 3 4]

наблюдатель: [0 2 1 3 4]

проблема то есть я хотите, чтобы процесс сортировки возвращал всегда одни и те же результаты. С моей точки зрения, можно добавить галстук-брелок, но я не знаю, как это сделать в Netlogo. Какие-либо предложения?

ответ

1

Вы можете создать своего собственного репортера, который считает выключатель. Ниже я создаю репортер с черепахами, который проверяет, равны ли вары, если да, то они сравниваются на основе того, кто (гарантированный уникальный идентификатор в качестве тай-брейкера). В противном случае черепахи сравниваются с указанной вами переменной.

Хотелось бы отметить, что вы можете просто передать черепах прямо, а не список своих.

to setup 
    ... 
    show sort-by turtle-compare turtles 
    ... 
end 

to-report turtle-compare [t1 t2] 
    report ifelse-value ([var] of t1 = [var] of t2) 
    [[who] of t1 < [who] of t2] 
    [[var] of t1 < [var] of t2] 
end 
+1

Было бы лучше использовать 'ifelse-value'. – Alan

+0

Хороший звонок! Исправлена. – mattsap

+0

Это работает! Благодаря! – Zahzah

Смежные вопросы