Anylogic- размещение агентов в местоположении другого агента

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