Модели первой группы изучаются аналитическими и численными методами (практические занятия, методы линейного и динамического программирования).
Имеют ряд существенных недостатков: описывают замкнутые системы, содержат ограничения количественного характера, недостаточно разработаны математические методы программирования и модели с неопределенными состояниями и ограничениями.
2.1. Имитационные модели. Ориентированные на решение задач оптимизации имитационные модели сложных систем имеют четко определенную адекватную структуру. В таких моделях осуществляется отображение множества доступных для управления переменных. Имитационные модели используются для описания замкнутых и открытых систем. Входами моделей являются переменные, с помощью которых отображаются любые внешние воздействия на систему. Все применяемые в имитационных моделях переменные являются измеряемыми и доступными для наблюдения.
Итак, к настоящему моменту мы рассмотрели все простые типы переменных, которые используются в С#. Кроме них, в С# существует три более сложных (но очень полезных) типа переменных:
• Перечислимый тип
• Структуры
• Массивы
Все типы, которые рассматривались до сих пор (за исключением типа string), имеют четко определенное множество допустимых значений. Это множество может быть настолько большим (как, например, у типа double), что его можно рассматривать в качестве континуума, однако все равно это фиксированное множество. В качестве простейшего примера можно привести тип bool, который может принимать только одно из двух значений: true или false.
Существует большое количество ситуаций, когда требуется переменная, принимающая значение из фиксированного множества. Например, может возникнуть необходимость в использовании переменной типа orientation (ориентирование), которая принимает одно из значений: north (север), south (юг), east (восток) или west (запад).
В подобных ситуациях очень полезным может оказаться перечислимый тип. Он позволяет сделать как раз то, что требуется для переменной orientation: определить тип, который принимает одно значение из конечного множества задаваемых нами значений.
Все, что для этого требуется сделать,— это создать свой собственный перечислимый тип, который будет называться orientation и для которого будут существовать четыре возможных значения, перечисленных выше. Обратите внимание, что это является дополнительным шагом: мы не просто объявляем переменную некоторого типа, мы сначала объявляем и подробно описываем создаваемый пользователем тип и только после этого получаем возможность объявить переменную данного типа.