В AnyLogic
Вы можете изменять только параметры агента верхнего уровня. (https://anylogic.help/anylogic/experiments/optimization.html#:~:text=Optimization%20experiment&text=If%20you%20need%20to%20run,%20optimization%20capability%20of%20AnyLogic.)
(https://anylogic.help/anylogic/experiments/parameter-variation.html)
Агент верхнего уровня не может иметь более 255 параметров.
Количество параметров метода ограничено 255 (https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.11)
Вопрос здесь не в том, почему для задачи оптимизации требуется 255 параметров, и не в том, является ли оптимизация на основе моделирования лучшим способом решения задачи с более чем 255 параметрами (переменными решения). Вопрос в способах преодоления этого ограничения.
я думал
Лучшим вариантом было бы следовать лучшим практикам Java и иметь Java class (у которого почти нет ограничений) (Максимальное количество параметров в Agent-Type)
Однако,
AnyLogic предоставляет Агенты, которые в основном являются предопределенными классами. с несколькими встроенными функциями (https://noorjax.com/2018/11/12/an-example-on-the-use-of-classes-in-anylogic/)
Поэтому кажется, что использование Java Class не поможет. Мне здесь не хватает трюка с Java? можно ли как-нибудь провести оптимизационный эксперимент в AnyLogic с более чем 255 параметрами?
Извините, если этот вопрос не входит в сферу компетенции SOF. Я все еще пытаюсь различать, что можно спрашивать, а что нет.
Есть несколько способов обойти лимит:
Структурируйте свои параметры в «сырых» классах Java, поэтому, например, ваш главный агент может иметь 3 параметра типа CoreParameters, ClimateVariables и EconomicVariables. (Просто посмотрите любое руководство по Java, чтобы узнать, как определять простые классы, которые фактически являются просто структурами данных.) Но теперь ваши эксперименты должны создавать соответствующие экземпляры этих классов в качестве значений параметров (и это усложняет определение таких вещей, как эксперимент с изменением параметров; вместо этого вы обычно используете пользовательский эксперимент, поскольку тогда у вас есть полный контроль над тем, как вы настраиваете параметры для каждого запуска). Для оптимизации вам также придется использовать пользовательский эксперимент для определения оптимизации, где, например, у вас может быть 500 переменных оптимизации, но ваш код для настройки модели из них устанавливает ваши 3 экземпляра класса параметров модели с этими 500 значениями. На странице справки Custom Experiment есть примеры этого.
Используйте внешние данные (например, Excel, загруженный в БД AnyLogic), чтобы предоставить некоторые/все «параметры» для вашей модели. Проблема здесь в том, что многократные эксперименты AnyLogic (в том числе основанные на оптимизации) предполагают различные параметры агента верхнего уровня. Но часто
Загрузка «параметров» останется фиксированной, поэтому их можно будет получить из этих внешних данных.
«Параметры» могут варьироваться в связанных наборах, поэтому это может сводиться к одному параметру, который предоставляет, скажем, имя файла для загрузки соответствующих внешних данных (и вы можете варьировать его в заранее подготовленном наборе). Но для этого требуется написать какую-то конкретную Java, чтобы вы могли импортировать внешние данные из динамически определяемого имени файла в базу данных AnyLogic или эквивалентно, но читать непосредственно из файла Excel. (Но это простой шаблонный код, который вы можете скопировать и использовать повторно, как только вы его «выучили».)
P.S. Я хотел бы повторить, однако, что любая оптимизация, включающая 255+ параметров, вероятно, бессмысленна, с небольшой вероятностью найти почти оптимальную (и если у вас есть модель с таким количеством параметров, учитывая, что вы действительно можете изменить все из них). независимо --- у вас есть проблема с дизайном модели).
П.П.С. Два ваших цитируемых фрагмента текста не противоречат друг другу. Вы можете написать необработанные классы Java в AnyLogic или использовать, скажем, Агент, который просто содержит набор параметров в качестве «класса структуры данных». Агенты (вместе со всем остальным) - это классы Java, но это не относится к вашему вопросу.
как сказал Стюарт, наличие 255 параметров может привести к результату, он не будет отличным ... лучше оценить, как уменьшить параметры, связанные с вашей проблемой, и для этого вам нужно создать .. один пример вы можете найти здесь: noorjax.com/2019/04/08/…