Приложение для оптимизации распределения ресурсов

В предыдущем посте я представлял схему имитационного моделирования для оптимизации распределения ресурсов в условиях неопределенности. В этой статье покажу приложение, которое я написал для решение этой задачи.

Распределение ресурсов

Данная программа предназначена для решения задач оптимизации распределения ресурсов при неполной информации с применением методов имитационного моделирования.

Ограничений на количество ресурсов и пунктов назначения теоретически нет, так как программа работает с динамической памятью. Реальный предел зависит от количества памяти и операционной системы.

Кроме того, в программе реализовано:

  1. Сохранение и загрузка задач во внешний файл.
  2. Каждый эффект от вложения определенного количества ресурса в определенный пункт может быть как статическим так и случайной величиной, лежащей в определенном диапазоне и распределенной по выбранному закону распределения.
  3. Использование 5 различных законов распределения:
  • Равномерный
  • Нормальный
  • Экспоненциальный
  • Вид возрастающего треугольника
  • Вид убывающего треугольника
  1. Тестирование датчиков случайных чисел на тождественность теоретического закона ‑ эмпирическому, по критерию Колмогорова
  2. Проведение имитационного моделирования задачи с неполной информацией, при этом реализован вывод следующих данных:
  • График плотности распределения значений эффективности за последний этап итераций
  • График функции распределения значений эффективности за последний этап итераций
  • Оценка соответствия полученного распределения эффективностей нормальному закону,  по критерию Колмогорова
  • Вывод среднего значения эффективности за последний этап итераций
  • Вывод среднеквадратического отклонения от среднего за последний этап итераций
  • Вывод моды за последний этап итераций
  • Построение доверительного интервала
  • Вычисление вероятности попадания в доверительный интервал
  • Вывод уникальных,  перспективных вариантов решения задачи, попадающих в доверительный интервал
  • Построение графика стремления к устойчивому состоянию и указания 5% и 2% коридора
  • Проверка неравенства Чебышева и вычисления необходимого числа итераций от допустимой ошибки

Программа имеет не сложный, но в то же время достаточно функциональный и удобный в применении интерфейс, позволяющий выполнять достаточно много операций для исследования и анализа результатов решения.

Читать далее

Оптимизация распределения ресурсов в условиях неопределенности

Задачи оптимизации распределения ресурсов при неполной информации встречаются в различных областях человеческой деятельности, потому что часто приходится решать такие задачи, где из некоторого набора вариантов решения нужно выбрать наиболее перспективные, удовлетворяющие определенным требованиям.

Распределение ресурсов

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

Например, задача распределения ресурсов в производстве может иметь следующую формулировку. Имеется несколько различных катализаторов производственного процесса, стадии этого процесса и экспериментальные данные об эффекте, получаемом от вложения катализаторов. Нужно конкретное количество распределить по стадиям так, чтобы максимизировать эффективность производственного процесса, который может выражаться через количество продукции.

В экономической области на место ресурсов становятся денежные средства, на место пунктов вложения ‑ либо города, в которые вкладывают средства, либо сфера деятельности, либо конкретный товар. Эффективностью вложения при этом можно называть прибыль, получаемую от вложения средств.

Задача эксперта состоит в том, чтобы исследовать зависимость решения задачи от исходных данных. На основании набора экспериментальных данных он исследует и анализирует  работу системы, и выбирает наиболее перспективные и максимально эффективные варианты решения задачи для того, чтобы их предоставить заказчику.

В условиях неполной информации эксперту предстоит изучать и анализировать систему. Для проведения многократных экспериментов необходимо имитировать реальную систему. Этот процесс называется имитационным моделированием.

Под имитацией системы понимается организация эксперимента, обеспечивающего логическую взаимосвязь свойств модели в соответствии с реальностью изучаемого процесса. Результаты имитации дополняют неполную информацию о начальных состояниях системы и ее входных воздействиях.

Читать далее

Обработка уведомлений и синтез речи в аудиофайл

Для более полной информации и глубокого понимания данного вопроса советую преобрести мою книгу «MS Agent и Speech API в Delphi», которая вышла в 2005 году в издательстве БХВ-Петербург. Теме Speech API посвещена отдельная ее глава (более 120 стр).
Если этой книги нет в магазинах вашего города, то ее можно заказать на сайте http://books.ru для получения по почте наложенным платежом.

Краткие основы:

Speech API имеет несколько уровней интерфейсов.

1. Voice Commnad API, Voice Dictation API, Voice Text API

2. Shared Object

3. DirectSpeechRecognition API, DirectTextToSpeech API

4. Audio Object

Интерфейсы самого верхнего уровня (наиболее простые) — 1. Данные интерфейсы предоставляют несколько ограниченный уровень доступа к речевым модулям. Зато интерфейсы управления у них намного проще, чем у интерфейсов низкого уровня(3).

Несмотря на то, что DirectTextToSpeech является более низким интерфейсом прикладного программирования, прямой синтез речи (Text-To-Speech) ничуть не сложнее, чем VoiceText API. Даже наоборот, именно API обладает большей гибкостью, скоростью и, следовательно, мощными возможностями.

DirectTextToSpeech иначе называется интерфейсом прямого синтеза речи, так как при его использовании приходится все делать руками, в том числе устанавливать соединение с аудиоустройством, производить поиск и выбор необходимого речевого модуля в системе и т. д. Например, в случае с VoiceText нам не нужно специально инициализировать звуковое устройство, в которое должны записываться волновые данные. В Direct TextToSpeech все не так. Здесь потребуется познакомиться с рядом объектов из Audio Objects и объектами для работы с движками.

Читать далее

Вышла моя книга «MS Agent и Speech API в Delphi»

В издательстве БХВ-Петербург  вышла моя книга «MS Agent и Speech API в Delphi«(+CD-ROM).  Серия Профессиональное программирование

Butorin_MSA_n_SAPI_in_Delphi

ISBN 5-94157-502-5

Формат 70х100 1/16

Объем 448 стр.

Цена* 194 руб.
* Цена приведена для магазина «Новая техническая книга» (Измайловский пр., д. 29).

Аннотация

Рассмотрено программирование нестандартных пользовательских интерфейсов в среде Delphi с применением технологий Microsoft Agent и Microsoft Speech API для операционных систем Windows 98/2000/XP. Представлены способы внедрения анимированных персонажей в приложения Delphi и использования методов синтеза и распознавания речи с помощью функций Speech API. Подробно рассмотрены речевые интерфейсы высокого и низкого уровней. Описан процесс создания собственных анимированных персонажей и использования нестандартной текстовой выноски BalloonDialog. На компакт-диске помещены все примеры, описанные в книге, необходимые компоненты и модули для создания приложений, а также программы автора, созданные с использованием описанных в книге технологий.

Краткое содержание

Введение
Глава 1. Технологии COM, OLE и ActiveX
Глава 2. Технология MS Agent в среде Delphi
Глава 3. Технология Speech API в среде Delphi
Глава 4. «Примочки» к MS Agent
Заключение
ПРИЛОЖЕНИЯ
Приложение 1. Ссылки на сайты и файлы в Интернете
Приложение 2. Описание компакт-диска
Список литературы
Предметный указатель

Заказывайте книгу в магазинах торговой сети!

Интернет-магазин ozon.ru: http://www.ozon.ru/context/detail/id/2162742/

Программа для классификации данных

Классификация данных позволяет определить к какому классу относятся новые данные на обучающей выборке.

cls_splash

Классификация данных на основе обучающей выборки работает следующим образом. Есть несколько выборок данных, каждое значение может иметь несколько параметров и, таким образом, описывать точку в пространстве. Каждое значение эксперт (учитель) относит к одному из классов вручную. Такое обучение выборки позволяет потом новые данные автоматически классифицировать и определять степень отношения к тому или иному классу.

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

Читать далее

Генератор случайных чисел по различным законам распределения

Известно, что в языках программирования встроен генератор случайных чисел. Обычно он генерирует значения от 0 до 1 по равномерному закону распределения. Иногда необходим генератор, который генерировал бы числа по другому закону распределения, например, по нормальному закону распределения, экспоненциальному или какому-либо другому.

В основе построения датчиков случайных величин лежит утверждение:

где

ε – случайная величина, принадлежащая промежутку [0..1], и имеющая равномерный закон распределения.

P(U) – требуемый закон распределения

Для того, чтобы вывести формулу датчика случайных чисел, с требуемым законом распределения, необходимо проинтегрировать требуемый закон плотности вероятности в аналитическом виде с заданными пределами.

Читать далее

Использование сканера в Delphi

Использование принтера и печать документов достаточно частая задача в проектах на Delphi, связанных с различными формами. Поэтому для этой цели существует ряд компонентов, в том числе и стандартных.

Однако использование сканера как оказалось не совсем тривиальная задача. В одной проекте на Delphi мне понадобилось использовать сканер и получать изображения с него. При первом рассмотрении нашлось несколько решений:

Каждый из способов хорош по своему.

Читать далее

MSAgent и MS Balloon

Долгое время посетители сайта просили меня написать статью о MS Balloon, о том как его подключить к Delphi и MSAgent, чтобы в нем появлялись разные сообщения. Я и рад был бы скорее написать, так как давно занимаюсь с MS Balloon.

MS Balloon

MS Balloon — это воздушный шарик, появлющийся у агента, когда он (или она или может быть оно) пытается нам что-то сообщить. Обычно это какое-нибудь сообщение, то что сейчас говорит персонаж. Но как мы видим в пакете MS Office в шарике выводится и другая дополнительная информация. Через него можно выдавать диалоги, просить пользователя ввести что-нибудь и т.д. Так почему же нам с вами этому не научиться?

Вот когда-то я тоже об этом подумал. MS Balloon это тоже ActiveX, своеобразная примочка к MSAgent’у. Причем бывают разные баллоны (шарики), их пишут разные люди. Например MsgBalloon, BlnDialog6.5 (есть уже 7.1, но его еще не пробовал) ну и стандартный в WindowsXP.

Читать далее

Speech API 4. Работа с голосом

Эта статья об управлении параметрами чтения чтекстов в Delphi функциями SpeechAPI.

Надеюсь, что вы прочитали первую часть SpeechAPI в Delphi и статью MSAgent и SpeechAPI, поэтому перейду непосредственно к способу управления параметрами чтения. Я опишу общий способ управления, а затем рассмотрим разницу управления параметрами речи при чтении методом Speak у MSAgent и чтением функциями API напрямую.

Теги

Как пишут в буржуйской офицальной документации к Microsoft Speech API: SAPI поддерживает изменения речевого вывода через специальные теги,вставляемые в читаемую текстовую строку. Эти теги помогают изменять параметры голосового движка для улучшения трансляции текста в речь. Поддерживает теги не только речевые движки, но и MSAgent. Теги — это основной способ управления голосовыми возможностями речевого синтезатора. Например: \spd=100\ — этот тег изменяет скорость речи на значение равное 100. Вот некоторые правила синтаксиса для речевых тегов:

  • Все теги начинаются и заканчиваются символом наклонной черты влево (\).
  • Отдельный бэкслэш не допускается в пределах тэга. Чтобы включить бэкслэш в текстовый параметр тэга, используйте двойную наклонную черту влево (\\).
  • Теги воспринимаются без учета регистра. Например, \Spd=100\ — тот же самый что и \SPD=100\.
  • Теги пробеловосприимчивы, то есть не допускают в себе лишних пробелов. Например, \Rst\ — не тот же самый что и \ Rst \

MSAgent поддерживает следующие теги: Chr, Ctx, Emp, Lst, Map, Mrk, Pau, Pit, Rst, Spd, Vol. При чтении через SAPI этот набор немного шире. Теги создавались для корректировки преобразования текста в речь, но некоторые из них изменяют стиль голоса, например на шепот. Поэтому одни из них имеют параметры, а у других они отсутствуют, как у тега \Emp\. А теперь подробнее про
каждый из них!

Читать далее

Speech API 4 в Delphi

В этой статье мы познакомимся с программированием речи в Delphi. Хотите чтобы Delphi заговорил — читайте эту страницу!

MSAgent & SpeechAPI

Нудеюсь, что вы уже установили пакет функций Speech API и хотя бы один речевой движок. Речевые движки — это те модули, которые синтезируют речь. Для доступа к ним нужно использовать специальные функции, которые описаны в наборе функций Speech API. Поэтому для того, чтобы написать минимальную программу умеющую говорить, нужны эти два компонента. Сначала мы попробуем написать как раз эту программу-минимум а потом заставим персонаж MS Agent заговорить. То есть постараемся совместить технологию MSAgent и SpeechAPI. Тогда агент станет еще более приятным.

Ну, а для того чтобы всем эти заняться нам потребуется полезный модулек speech.pas, в котором объявлены полезные константы, типы, функции и интрефейсы. Не забудьте подключить его в разделе uses главного модуля приложения.

Читать далее