Динамика системы Anylogic: запас мощности

Анилогическая система

Начальное значение запаса - 1 Расход: 0,1 Начальное значение запаса - 0.

Когда я запустил симуляцию, я понял, что стоимость акций становится меньше 0 (получая отрицательное значение). Как остановить поток, когда значение Запаса достигает нуля.

1 ответ

Решение

Вопрос, на который должен быть очень очевидный ответ, но нет.

Первое и самое важное: нет никакой опции, которую вы можете установить, чтобы определить 0 как минимальное значение запаса, потому что поток будет продолжать хотеть брать из запаса, несмотря ни на что, поэтому вам нужно изменить поток, когда акция 0 (или около 0).

Помните, что System Dynamics - это метод непрерывного моделирования, и поскольку он использует шаги, он не идеален... Поэтому я покажу вам 2 возможных трюка, чтобы сделать это

Трюк 1: этот трюк даст вам неточное число, близкое к нулю, но он всегда достаточно хорош: Легкость, В потоке, введите следующую формулу:

stock-(getEngine().getNextStepTime()-time())*0.1<0 ? 0 : 0.1

getEngine (). getNextStepTime () - время, в которое произойдет следующий расчет, поэтому getEngine().getNextStepTime()-time() скажет вам шаг времени для следующей итерации (численные методы для расчета шагов, используемых anylogic изменениями для каждой итерации, поэтому вы должны сделать это). Я умножаю временной шаг на 0,1, поскольку это выбранная вами скорость потока. Скорость потока никогда не равна 0,1, реальное значение равно 0,1*(шаг по времени)/(единица времени). В этом случае единица времени равна 1 секунде, поэтому я делю на 1, поэтому мне не нужно ставить это деление. Наконец, формула утверждает, что если следующая итерация даст вам отрицательный запас, то сделайте скорость потока равной 0 вместо 0,1

Трюк 2: Используйте следующую конфигурацию: новая структура поток будет иметь flowrate в формуле переменная flowRate равна 0,1, а событие является условным событием со следующим условием:

stock<=0

и следующее действие:

flowRate=0;
stock1=stock1+stock;
stock=0;

В этом случае акция будет отрицательной в течение одного временного шага (около 1-10 миллисекунд).. и мы искусственно устанавливаем реальные значения.

(вы можете комбинировать трюк 1 и трюк 2, если хотите)

Другие вопросы по тегам