Переменные не добавляют себя правильно. 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
Я не знаю, является ли это причиной вашей ошибки или нет, но в любом случае вы захотите ее исправить.