Генерация случайного числа в Уппале
У меня вопрос: можно ли сгенерировать случайное число в Уппале?
Я хотел бы сгенерировать число из диапазона значений. Более того, я хотел бы генерировать не только целые числа, но и двойные значения.
например: двойной [7.25,18.3]
Я нашел этот вопрос, о котором говорили то же самое. Я попробовал это. Тем не менее, я получил эту ошибку: синтаксическая ошибка неожиданно T_SELECT.
Не работает Я довольно новичок в мире Уппала, я был бы признателен за любую помощь, которую вы можете оказать мне.
С Уважением,
1 ответ
Это распространенный и неправильно понятый вопрос в Уппале.
Простой ответ:
double val; // declaration
val = random(18.3-7.25)+7.25; // use in update, works in SMC (Uppaal v4.1)
Подробный ответ:
Уппал поддерживает символический анализ, а также статистический, и лечение и возможности радикально отличаются. Поэтому сначала нужно решить, какой анализ нужен. Обычно каждый начинает с простого символического анализа, а затем дополняет его стохастическими характеристиками, иногда стохастическое поведение также необходимо проверять символически.
В символическом анализе (запросы
A[]
,A<>
,E<>
,E[]
и т. д.), случайный синонимичен с недетерминированным, то есть, если модель содержит некоторое "случайное" поведение, то проверка должна проверять все из них любым способом. Поэтому такое поведение моделируется как недетерминированный выбор между ребрами. Легко настроить набор ребер в целочисленном диапазоне с помощью оператора select на ребре, где объявлена временная переменная, и ее значение может быть использовано при защите, синхронизации и обновлении. Символьный анализ поддерживает только целочисленные типы данных (без типов с плавающей запятой, таких какdouble
) и непрерывные диапазоны по часам (определяется ограничениями в стражах и инвариантах).Статистический анализ (с помощью моделирования Монте-Карло, такие вопросы, как
Pr[...](<> p)
,E[...](max: var)
,simulate
и т. д.) поддерживает двойные типы и функции с плавающей запятой, такие какsin
,cos
,sqrt
,random(MAX)
(равномерное распределение по[0, MAX)
) в дополнение к целочисленным типам данных. Точечные переменные также могут рассматриваться как тип с плавающей запятой, за исключением того, что их производная по умолчанию установлена в 1 (может быть изменена в инвариантах, которые допускают ODE - обыкновенные дифференциальные уравнения).Можно создавать модели с операциями с плавающей запятой (в том числе
random
) и по-прежнему применять символический анализ при условии, что переменные с плавающей запятой не влияют на поведение модели и не ограничивают его, а действуют лишь как функция стоимости в пространстве состояний. Вот систематические правила для достижения этой цели:а) часы, используемые в ODE, должны быть объявлены
hybrid clock
тип.б) гибридные часы и переменные двойного типа не могут появляться в защитных и инвариантных ограничениях. Только ОДУ разрешены через гибридные часы в инварианте.