Переменные не добавляют себя правильно. NETLogo

Я работал над моделированием конкурирующих авиакомпаний на этапе полета. Итак, агенты, которых я смоделировал, - это пассажиры, которых я смоделировал как разных агентов для каждого временного интервала, в который они хотят прилететь. Авиакомпании и фактические временные интервалы аэропорта. Идея заключается в том, что авиакомпании будут варьировать свои тарифы и расписание для полетов в разное время в зависимости от предыдущего рейса (итерации), чтобы привлечь наибольшее количество пассажиров или получить прибыль. Затраты связаны с тем, во сколько они хотят лететь (более высокий спрос - более высокие затраты). Я уже смоделировал более или менее модель выбора пассажира, используя функцию полезности:

to flightchoice2

let potential-destinations out-link-neighbors

let best-patch max-one-of potential-destinations [utility-for1 myself]


ifelse random-float 1 > q 

[move-to best-patch][move-to one-of potential-destinations]


end  



to-report utility-for2 [businessman89] ;; Schedule Choice

let beta1 1

let beta2 1


let utility (beta1 * (1 / airfare) + beta2 * abs(time - time1))


report utility


end 

"где (время-время1) в основном представляет разницу во времени между тем, что предлагает авиакомпания, и тем, что хотят пассажиры.

Моя проблема заключается в том, чтобы на самом деле произвести оплату, чтобы обороты авиакомпаний увеличились, а агенты для пассажиров были ликвидированы. Я немного следовал за моделью "овца-волк" и дошел до того, чтобы избавиться от пассажиров, но оборот авиакомпаний просто не увеличится: "

to airfare-payment  ;; payment procedure


let customers1 business1-here      

if customers1 != nobody           

[ ask customers1 [ die ]             

set turnover turnover + airfare ] 



let customers2 business2-here     

 if customers2 != nobody             

[ ask customers2 [ die ]          

  set turnover turnover + airfare ] 



 let customers01 leisure1-here     

 if customers01 != nobody            

[ ask customers01 [ die ]            

  set turnover turnover + airfare ] 



  let customers02 leisure2-here   

 if customers02 != nobody           

[ ask customers02 [ die ]      

  set turnover turnover + airfare ] 



end

Может кто-нибудь помочь с тем, почему оборот для авиакомпаний не складывается правильно?

РЕДАКТИРОВАТЬ 1 - очень упрощенная версия, моя модель загружена, чтобы показать точную проблему

Агенты загружены, ссылки созданы на самолеты от пассажировАгенты загружены, ссылки созданы на самолеты от пассажиров

Самолеты перемещаются в свои "временные интервалы вылета", которые представлены домами, и затем на основе временного интервала и стоимости авиабилетов пассажиры выбирают самолет.

Самолеты перемещаются в свои 'временные интервалы вылета', которые представлены домами, и затем на основе временного интервала и стоимости авиабилетов пассажиры выбирают самолет.

Из этого рисунка видно, что пассажиры размещены в одном и том же положении самолета, но когда выполняется процедура [оплата авиаперелета] (описанная ранее), каким-то образом оборот не складывается правильно.

Из этого рисунка видно, что пассажиры размещены в одном и том же положении самолета, но когда выполняется процедура [оплата авиаперелета] (описанная ранее), каким-то образом оборот не складывается правильно

На этом изображении показано количество оборотов до и после процедуры, несмотря на то, что обороты для авиакомпаний увеличиваются, но это не происходит по правильному счету.Это изображение показывает количество оборотов до и после процедуры, даже если обороты для авиакомпаний возрастают, но это не происходит по правильному подсчету

Я уверен, что проблема заключается в том, как переменные настраиваются при создании агентов. Оборот устанавливается как переменная "собственная черепаха", а стоимость авиабилетов устанавливается как переменная для каждой авиакомпании.

breed [business1 businessman78]  ;; business is its own plural, so we use "businessman" as the singular.
breed [business2 businessman89]

breed [Airline1 airplane1] 
breed [Airline2 airplane2]

breed [leisure1 leisureman78]
breed [leisure2 leisureman89]

breed [Runway1 r78] 
breed [Runway2 r89] 

airline1-own [ start-patch time1 airfare capacity turnover]
airline2-own [ start-patch time1 airfare capacity turnover] 
turtles-own [ time cost ]

Затем значение для авиабилетов и оборота устанавливается при создании самолетов в настройках. Стоимость авиабилета для А1 составляет 100, для А2 - 1000,

1 ответ

Решение

Этот код неверен:

let customers2 business2-here     
if customers2 != nobody

if условие всегда верно, потому что customers2 набор агентов, и nobody нет, поэтому они никогда не равны друг другу. nobody представляет отсутствие одного агента; это не пустой набор агентов.

(Подумайте об этом так: просто потому, что у меня нет яблока, это не значит, что у меня есть пустой мешок яблок. У меня может вообще ничего не быть, даже сумка.)

Я думаю, что вы имеете в виду:

let customers2 business2-here
if any? customers2

Я не знаю, является ли это причиной вашей ошибки или нет, но в любом случае вы захотите ее исправить.

Другие вопросы по тегам