#anylogic #agent
#anylogic #агент
Вопрос:
У меня есть два агента: AgentA (evStations) (начальное местоположение и номера загружаются из базы данных) и AgentB (eVs) (изначально пустой, а количество агентов указывается пользователем).
При запуске модели я хочу разместить AgentsB в местоположениях AgentA (точная широта и долгота). Как я могу это сделать? Зная, что количество агентов B намного больше, чем у АгнетЫ.
То, что я пробовал (на основе существующего примера anylogic), в главном меню> Действия агента> При запуске
for(EV ev: eVs){
ev.set_lat(
selectFrom(evstations)
.where(evstations.id.eq(ev.getIndex()))
.firstResult(evstations.latitude)
);
ev.set_lon(
selectFrom(evstations)
.where(evstations.id.eq(ev.getIndex()))
.firstResult(evstations.logtitude)
);
ev.setLocation(ev.lat, ev.lon);
}
[enter image description here][1]
я не уверен, как это сделать правильно, я думаю, что это работает только в том случае, если оба агента имеют одинаковый размер.
Пожалуйста, посоветуйте?
Спасибо
Комментарии:
1. если agentAs равно 100, а agentsB равно 150, вы можете поместить первые 100 в те же местоположения, но куда вы хотите поместить остальные 50?
2. наоборот, AgentA находится примерно в 10 местоположениях, а agenB — в 50. Я хочу, чтобы 50 агентов B были случайным образом распределены между 10 местоположениями агента B.
3. тогда это не наоборот: P
4. о да, вы правы.
5. AgentA находится примерно в 10 местоположениях, а agenB — в 50. Я хочу, чтобы 50 агентов B были распределены между 10 местоположениями агента B. Не обязательно распределены случайным образом, например, у одного agnetB должно быть 10, а у другого только 3. Как я могу это сделать?
Ответ №1:
сначала определите все evStations как агенты, вы можете прочитать их из базы данных.
Затем
for(EV ev: eVs){
EvStation evs=evStations.random();
ev.setLocation(evs);
}
Комментарии:
1. Спасибо, но я не думаю, что это работает. Поскольку я написал другую функцию для проверки, находится ли ev на evStation, (for( EV ev : eVs ){ if (commuter.evDestination1.distanceByRoute( ev ) == 0) commuter.ev= ev; возвращает false;) но она не возвращает ожидаемое значение.
2. я думаю, что ваша проблема там в другом … Я не знаю, что такое пригородный поезд, поэтому я не могу вам помочь