2017-01-03 12 views
1

в проекте AnyLogic, в блоке «захватить» мне нужно сделать заказный выбор ресурсов из наборов ресурсов. На вкладке свойств блока «захватить» поле «Наборы ресурсов» со значением { {ResourcePool_A, ResourcePool_B} } и флажок «настроить выбор ресурсов». В разделе кода «ресурс выбора условия», мне нужно сделать выбор, как:AnyLogic, выбор пользовательских ресурсов среди наборов ресурсов

if (unit isfrom ResourcePool_A) 
    { 
     if (unit.param_a == value) 
      do something 
      .... 
    } 
    else if (unit isfrom ResourcePool_B) 
    { 
     if (unit.param_b == value) 
      do something 
      .... 
    } 

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

ответ

0

Я решил проблему, пишущую функцию AnyLogic, которая возвращает логическое значение, и я использовал его в состоянии выбора ресурса. Я реализовал «isfrom» дискриминировать из которых пулы ресурс подобран, как показано в следующем коде:

`

// cast pool object to the prorper type 
ResourcePool t_pool = (ResourcePool)pool; 

// resource selection condition 
if ((t_pool == ResourcePool_A && ((Resource_A)unit).param == agent.param_bar) || 
    (t_pool == ResourcePool_B && ((Resource_B)unit).param == agent.param_bar)) { 
    return true; 
} 
else { 
    return false; 
} 

`

В документации AnyLogic не объясняется, что при выборе ресурсов состояние блока захвата у вас есть доступ к объекту pool (это плохо ...).

+0

Не могли бы вы проверить, какая версия AnyLogic установлена ​​на вашем компьютере? В последней версии 7.3.6 «пул» включен в список локальных переменных, доступных для параметра «Условие выбора ресурса». Он также описан в новейшей справке о блоке «Захватить»/«Сервис» (http://help.anylogic.com/topic/com.xj.anylogic.help/html/_ELR/Seize.html). ПРИМЕЧАНИЕ. Когда вы нажимаете в поле редактирования любого параметра кода, вы можете увидеть значок маленькой лампочки в верхнем левом углу. Наведите указатель мыши на него, чтобы просмотреть список возможных локальных переменных. –

0

Из вашего вопроса кажется, что вам не нужно выбирать конкретный ресурс, а скорее выполнять определенный набор действий на ресурсе после его захвата. Вот почему я добавил два ответа.

1.
Если вы просто хотите выполнить определенный набор действий. Вы должны просто скопировать код в действие «На захвате единицы» в объекте seize.

2.
Если вы хотите выбрать определенный ресурс. самый простой способ сделать это - создать функцию Anylogic resource_selector(), которая возвращает логическое значение.

if(unit isfrom ResourcePool_A && unit.param_foo == agent.param_bar) 
    ... 
    your own code 
    ... 
    return true; 
else 
    return false; 

, а затем в ресурсном состоянии выбора записи:

resource_selector(unit, agent); 
+0

Мне было интересно, как реализовать «isfrom». Мне нужно было выбрать конкретные ресурсы, и я нашел решение, посмотри мой ответ, если хочешь. Спасибо за ваши советы. –

+0

отлично :-) можете ли вы пометить свой ответ как правильный? поэтому мы можем закрыть вопрос –

+0

Привет! Я не знаю, как это сделать. Вы знаете? Спасибо. –

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

  • Нет связанных вопросов^_^