Итак, моделирование позволяет заранее предвидеть ход событий и тенденции развития, присущие управляемой системе, выяснить условия ее существования и установить режим деятельности с учетом влияния разных факторов. При этом на первый взгляд, может показаться, что чем большее количество факторов учтено в модели, тем лучше сама модель. На самом деле детализированная модель не всегда целесообразна, так как это излишне усложняет модель и представляет трудность для ее анализа.
Совершенствование процесса принятия управленческих решений и соответственно повышение качества принимаемых решений достигается за счет использования научного подхода, моделей и методов принятия решений. Модель является представлением системы, идеи или объекта. Необходимо использовать модели из-за сложности организаций, невозможности проводить эксперименты в реальном мире, необходимости заглядывать в будущее. Основные типы моделей: физические, аналоговые и математические (символические). Общими проблемами моделирования являются недостоверные предпосылки, информационные ограничения, плохое использование результатов и чрезмерные расходы.
Сама по себе имитационная модель очень редко является целью проекта. Для конечного пользователя важно решение конкретной задачи, например: оптимизировать количество персонала, определиться с планированием территории, управлением парком транспортных средств, политикой закупок, процесс сборки изделий и т.д. И естественно, модель одного и того же объекта будет выглядеть совершенно по-разному при разных целях моделирования. А иногда при анализе задачи становится ясно, что изначально планировавшееся ИМ вовсе не необходимо, и можно обойтись более простыми методами (например, линейным программированием). Это важно отследить в самом начале проекта.
При имитационном моделировании динамические процессы системы-оригинала подменяются процессами, имитируемыми в абстрактной модели, но с соблюдением основных правил (режимов, алгоритмов) функционирования оригинала. В процессе имитации фиксируются определенные события и состояния или измеряются выходные воздействия, по которым вычисляются характеристики качества функционирования системы. Имитационное моделирование позволяет рассматривать процессы, происходящие в системе, практически на любом уровне детализации. При этом в имитационной модели можно реализовать практически любой алгоритм управленческой деятельности или поведения системы. Кроме того, модели, которые допускают исследование аналитическими методами, также могут анализироваться имитационными методами. Все это служит причиной того, что имитационные методы моделирования в настоящее время становятся основными методами исследования сложных систем.
Результаты имитационного моделирования могут быть оформлены в виде графиков или таблиц, в которых каждому варианту значений параметров исследуемого объекта поставлены в соответствие определенные значения показателей , оценивающих функционирование объекта. Однако зависимости между теми же величинами в аналитическом виде с имитационной модели не могут быть получены Все имитационные модели представляют собой модели типа так называемого черного ящика. Это означает, что они обеспечивают выдачу выходных параметров системы, если на ее взаимодействующие подсистемы поступают входные воздействия. Поэтому для получения необходимой информации или результатов следует осуществить "прогон" (реализацию, "репетицию") моделей, а не "решать" их. Имитационные модели не формировать свое собственное решение в том виде, в каком это имеет место в аналитических моделях, а могут лишь служить в качестве средства для анализа поведения системы в условиях, которые определяются экспериментатором. Этот кажущейся на первый взгляд недостаток, на самом деле является главным достоинством имитационного моделирования вследствие того, что целесообразность применения имитационного моделирования становится очевидной при наличии любого из следующих условий:
Ш не существует законченной математической постановки задачи, либо еще не разработаны аналитические методы решения сформулированной математической модели
Ш аналитические методы имеются, но математические процедуры столь сложны и трудоемки, что имитационное моделирование дает более простой решения задачи
Ш кроме оценки определенных параметров, желательно осуществить на имитационной модели наблюдение за ходом процесса в течение некоторого времени
Ш имитационное моделирование может оказаться единственной возможностью вследствие трудностей постановки экспериментов и наблюдения явлений в реальных условиях.
В итоге можно сделать вывод: к методу имитационного моделирования обращаются тогда и только тогда, когда аналитическое решение задачи исследования данного объекта затруднено или невозможно.
Функция load() модуля pygame.image загружает изображение и создает экземпляр Surface, на котором отображено это изображение. В load() передается имя файла. "Родным" форматом является BMP, однако если функция pygame.image.get_extended() возвращает истину, то можно загружать ряд других форматов: PNG, GIF, JPG и др.
Если у изображения нет прозрачного слоя, но он необходим, то следует воспользоваться методом set_colorkey() класса Surface:
...
dog_surf = pygame.image.load('dog.bmp')
dog_surf.set_colorkey((255, 255, 255))
...
Все пиксели, цвет которых совпадает с переданным в set_colorkey() значением, станут прозрачными.
dog2.png
У формата PNG с альфа-каналом (когда для точек можно настраивать степень прозрачности; обычно устанавливается полностью прозрачный фон) таких проблем нет:
...
sun_surf = pygame.image.load('sun.png')
sun_rect = sun_surf.get_rect()
sc.blit(sun_surf, sun_rect)
...
dog_sun.png
Ко всем экземплярам Surface рекомендуется применять метод convert(), который, если не передавать аргументы, переводит формат кодирования пикселей поверхности в формат кодирования пикселей главной поверхности. При выполнении игры это ускоряет отрисовку поверхностей.
Если поверхность была создана на базе изображения с альфа-каналом, то вместо convert() надо использовать метод convert_alpha(), так как первый удаляет прозрачные пиксели (вместо них будет черный цвет). Таким образом, код загрузки и обработки изображений разных форматов должен выглядеть примерно так:
Метод convert() возвращает новую, конвертированную, поверхность. Он не изменяет ту, к которой применяется.
В модуле pygame.image есть функция save(), которая позволяет сохранять переданную ей поверхность (не обязательно главную) в формат BMP, TGA, PNG, JPEG. Пример:
...
while 1:
for i in pygame.event.get():
if i.type == pygame.QUIT:
exit()
elif i.type == pygame.KEYUP and i.key == pygame.K_s:
pygame.image.save(sc, 'day.png')
...
Изменение поверхностей
Модуль pygame.transform содержит функции для изменения поверхностей. Некоторые трансформации (например, изменение размера) приводят к ухудшению изображения из-за потери части пикселей. В таких случаях надо сохранять исходную поверхность и выполнять трансформации от нее.
Функции модуля transform, которые изменяют поверхности, возвращают новые. Первым аргументом им передается исходный Surface. Ниже приведены примеры использования наиболее востребованных функций.
Функция flip() переворачивает Surface по горизонтали и вертикали, к потери качества не приводит. Указывается поверхность и булевыми значениями оси переворота.
import pygame
pygame.init()
sc = pygame.display.set_mode((400, 300))
sc.fill((100, 150, 200))
dog_surf = pygame.image.load('dog.bmp').convert()
dog_surf.set_colorkey((255, 255, 255))
dog_rect = dog_surf.get_rect(center=(200, 150))
sc.blit(dog_surf, dog_rect)
pygame.display.update()
while 1:
for i in pygame.event.get():
if i.type == pygame.QUIT:
exit()
elif i.type == pygame.KEYUP and i.key == pygame.K_f:
Итак, моделирование позволяет заранее предвидеть ход событий и тенденции развития, присущие управляемой системе, выяснить условия ее существования и установить режим деятельности с учетом влияния разных факторов. При этом на первый взгляд, может показаться, что чем большее количество факторов учтено в модели, тем лучше сама модель. На самом деле детализированная модель не всегда целесообразна, так как это излишне усложняет модель и представляет трудность для ее анализа.
Совершенствование процесса принятия управленческих решений и соответственно повышение качества принимаемых решений достигается за счет использования научного подхода, моделей и методов принятия решений. Модель является представлением системы, идеи или объекта. Необходимо использовать модели из-за сложности организаций, невозможности проводить эксперименты в реальном мире, необходимости заглядывать в будущее. Основные типы моделей: физические, аналоговые и математические (символические). Общими проблемами моделирования являются недостоверные предпосылки, информационные ограничения, плохое использование результатов и чрезмерные расходы.
Сама по себе имитационная модель очень редко является целью проекта. Для конечного пользователя важно решение конкретной задачи, например: оптимизировать количество персонала, определиться с планированием территории, управлением парком транспортных средств, политикой закупок, процесс сборки изделий и т.д. И естественно, модель одного и того же объекта будет выглядеть совершенно по-разному при разных целях моделирования. А иногда при анализе задачи становится ясно, что изначально планировавшееся ИМ вовсе не необходимо, и можно обойтись более простыми методами (например, линейным программированием). Это важно отследить в самом начале проекта.
При имитационном моделировании динамические процессы системы-оригинала подменяются процессами, имитируемыми в абстрактной модели, но с соблюдением основных правил (режимов, алгоритмов) функционирования оригинала. В процессе имитации фиксируются определенные события и состояния или измеряются выходные воздействия, по которым вычисляются характеристики качества функционирования системы. Имитационное моделирование позволяет рассматривать процессы, происходящие в системе, практически на любом уровне детализации. При этом в имитационной модели можно реализовать практически любой алгоритм управленческой деятельности или поведения системы. Кроме того, модели, которые допускают исследование аналитическими методами, также могут анализироваться имитационными методами. Все это служит причиной того, что имитационные методы моделирования в настоящее время становятся основными методами исследования сложных систем.
Результаты имитационного моделирования могут быть оформлены в виде графиков или таблиц, в которых каждому варианту значений параметров исследуемого объекта поставлены в соответствие определенные значения показателей , оценивающих функционирование объекта. Однако зависимости между теми же величинами в аналитическом виде с имитационной модели не могут быть получены Все имитационные модели представляют собой модели типа так называемого черного ящика. Это означает, что они обеспечивают выдачу выходных параметров системы, если на ее взаимодействующие подсистемы поступают входные воздействия. Поэтому для получения необходимой информации или результатов следует осуществить "прогон" (реализацию, "репетицию") моделей, а не "решать" их. Имитационные модели не формировать свое собственное решение в том виде, в каком это имеет место в аналитических моделях, а могут лишь служить в качестве средства для анализа поведения системы в условиях, которые определяются экспериментатором. Этот кажущейся на первый взгляд недостаток, на самом деле является главным достоинством имитационного моделирования вследствие того, что целесообразность применения имитационного моделирования становится очевидной при наличии любого из следующих условий:
Ш не существует законченной математической постановки задачи, либо еще не разработаны аналитические методы решения сформулированной математической модели
Ш аналитические методы имеются, но математические процедуры столь сложны и трудоемки, что имитационное моделирование дает более простой решения задачи
Ш кроме оценки определенных параметров, желательно осуществить на имитационной модели наблюдение за ходом процесса в течение некоторого времени
Ш имитационное моделирование может оказаться единственной возможностью вследствие трудностей постановки экспериментов и наблюдения явлений в реальных условиях.
В итоге можно сделать вывод: к методу имитационного моделирования обращаются тогда и только тогда, когда аналитическое решение задачи исследования данного объекта затруднено или невозможно.
Объяснение:
Модули pygame.image и pygame.transform. Урок 9
Загрузка и сохранение изображений в Pygame
Функция load() модуля pygame.image загружает изображение и создает экземпляр Surface, на котором отображено это изображение. В load() передается имя файла. "Родным" форматом является BMP, однако если функция pygame.image.get_extended() возвращает истину, то можно загружать ряд других форматов: PNG, GIF, JPG и др.
import pygame
pygame.init()
sc = pygame.display.set_mode((400, 300))
sc.fill((100, 150, 200))
dog_surf = pygame.image.load('dog.bmp')
dog_rect = dog_surf.get_rect(bottomright=(400, 300))
sc.blit(dog_surf, dog_rect)
pygame.display.update()
while 1:
for i in pygame.event.get():
if i.type == pygame.QUIT:
exit()
pygame.time.delay(20)
dog1.png
Если у изображения нет прозрачного слоя, но он необходим, то следует воспользоваться методом set_colorkey() класса Surface:
...
dog_surf = pygame.image.load('dog.bmp')
dog_surf.set_colorkey((255, 255, 255))
...
Все пиксели, цвет которых совпадает с переданным в set_colorkey() значением, станут прозрачными.
dog2.png
У формата PNG с альфа-каналом (когда для точек можно настраивать степень прозрачности; обычно устанавливается полностью прозрачный фон) таких проблем нет:
...
sun_surf = pygame.image.load('sun.png')
sun_rect = sun_surf.get_rect()
sc.blit(sun_surf, sun_rect)
...
dog_sun.png
Ко всем экземплярам Surface рекомендуется применять метод convert(), который, если не передавать аргументы, переводит формат кодирования пикселей поверхности в формат кодирования пикселей главной поверхности. При выполнении игры это ускоряет отрисовку поверхностей.
Если поверхность была создана на базе изображения с альфа-каналом, то вместо convert() надо использовать метод convert_alpha(), так как первый удаляет прозрачные пиксели (вместо них будет черный цвет). Таким образом, код загрузки и обработки изображений разных форматов должен выглядеть примерно так:
...
dog_surf = pygame.image.load('dog.bmp').convert()
dog_surf.set_colorkey((255, 255, 255))
...
sun_surf = pygame.image.load('sun.png').convert_alpha()
...
Что по смыслу равносильно:
...
dog_surf = pygame.image.load('dog.bmp')
dog_surf = dog_surf.convert()
...
Метод convert() возвращает новую, конвертированную, поверхность. Он не изменяет ту, к которой применяется.
В модуле pygame.image есть функция save(), которая позволяет сохранять переданную ей поверхность (не обязательно главную) в формат BMP, TGA, PNG, JPEG. Пример:
...
while 1:
for i in pygame.event.get():
if i.type == pygame.QUIT:
exit()
elif i.type == pygame.KEYUP and i.key == pygame.K_s:
pygame.image.save(sc, 'day.png')
...
Изменение поверхностей
Модуль pygame.transform содержит функции для изменения поверхностей. Некоторые трансформации (например, изменение размера) приводят к ухудшению изображения из-за потери части пикселей. В таких случаях надо сохранять исходную поверхность и выполнять трансформации от нее.
Функции модуля transform, которые изменяют поверхности, возвращают новые. Первым аргументом им передается исходный Surface. Ниже приведены примеры использования наиболее востребованных функций.
Функция flip() переворачивает Surface по горизонтали и вертикали, к потери качества не приводит. Указывается поверхность и булевыми значениями оси переворота.
import pygame
pygame.init()
sc = pygame.display.set_mode((400, 300))
sc.fill((100, 150, 200))
dog_surf = pygame.image.load('dog.bmp').convert()
dog_surf.set_colorkey((255, 255, 255))
dog_rect = dog_surf.get_rect(center=(200, 150))
sc.blit(dog_surf, dog_rect)
pygame.display.update()
while 1:
for i in pygame.event.get():
if i.type == pygame.QUIT:
exit()
elif i.type == pygame.KEYUP and i.key == pygame.K_f:
# собака перевернется слева направо
flip = pygame.transform.flip(dog_surf, 1, 0)
sc.fill((100, 150, 200))
sc.blit(flip, dog_rect)
pygame.display.update(dog_rect)
pygame.time.delay(20)
Поворот и изменение размера:
...
dog_surf = pygame.image.load('dog.bmp').convert()
dog_surf.set_colorkey((255, 255, 255))
dog_rect = dog_surf.get_rect(center=(200, 150))
sc.blit(dog_surf, dog_rect)
pygame.display.update()
# ждем 1 секунду перед изменением
pygame.time.wait(1000)
sc.fill((100, 150, 200))
# уменьшаем в два раза
scale = pygame.transform.scale(dog_surf, (dog_surf.get_width()//2,
dog_surf.get_height()//2))
scale_rect = scale.get_rect(center=(200, 150))
sc.blit(scale, scale_rect)
pygame.display.update(dog_rect)
pygame.time.wait(1000)
sc.fill((100, 150, 200))
# поворачиваем на 45 градусов
rot = pygame.transform.rotate(dog_surf, 45)
rot_rect = rot.get_rect(center=(200, 150))
sc.blit(rot, rot_rect)
pygame.display.update()
...
Практическая работа
Допустим, у вас есть такое изображение вида сверху машины:
car.png
Напишите программу управления ее движением с стрелок клавиатуры (вверх, вниз, влево, вправо) так, чтобы объект всегда двигался головой вперед.