ОСНОВНЫЕ ПРАВИЛА И ОГРАНИЧЕНИЯ ИСПОЛЬЗОВАНИЯ СИСТЕМЫ
Скачать систему:
FREE.rar
EXE_RASTRIGIN.rar
На рисунке 1 показано взаимодействие программы пользователя modmod.exe и оптимизационного алгоритма genoptim.exe, рабочий файл &&&_Rab.txt и управляющие файлы &_in_gen.txt , &&_in_X_start.txt, &&_in_iZEL.txt. Среди управляющих только первый является обязательным, два других используются по мере необходимости. Рабочий файл &&&_Rab.txt используется как для считывания, так и записи информации в модели пользователя.
Рисунок 1 – Взаимосвязь модулей
Ваша программа modmod.exe, разрабатывайте ее на любом языке программирования.
1. В первую очередь необходимо подготовить управляющую информацию в файле &_in_gen.txt, например:
5 ! количество управляемых переменных
2 ! количество функциональных ограничений
100 100 ! шаг печати на дисплее и внешнем файле соответственно
-500 500 ! диапазон изменения 1-й оптимизируемой переменной
-500 500 !------------------ 2-й -------------------------
-500 500 !------------------ 3-й -------------------------
-500 500 !------------------ 4-й -------------------------
-500 500 !------------------ 5-й -------------------------
2. Далее необходимо организовать считывание вектора оптимизируемых параметров xi из файла &&&_Rab.txt – все xi расположены последовательно в одной записи в формате действительных чисел и разделены пробелами.
3. Сразу же проверяем ограничения на параметры - ограничения 1 рода.
Каждая переменная xi, i=1,n ограничена снизу и сверху, то есть имеем 2*n ограничений.
а) Если какая-либо из них выходит за границу, то выводим в файл &&&_Rab.txt (в первую запись) два числа: отрицательное число -1, как индикатор недопустимости ситуации, и номер этого ограничения-условия для запуска соответствующего счетчика активных (нарушенных) ограничений. Принципиального значения этот номер не имеет. На этом заканчиваем расчет.
Например, для приведенного выше файла &_in_gen.txt могло бы быть: -1 7
Число 7 означает, что вышел за границу X4 , нарушено седьмое по порядку ограничение.
б) Если все ограничения 1 рода выполнены, то приступаем к расчету модели.
4. Последовательно выполняем расчет. Здесь возможны опять же два случая.
а) Если встретится некоторая нежелательная ситуация (вы ее сами определяете согласно логике решаемой задачи), то, не продолжая расчет далее, аналогично записываем в файла &&&_Rab.txt (в первую запись) два числа: отрицательное число -1, как индикатор недопустимости ситуации, и ее условный номер. На этом заканчиваем расчет.
Например, для представленного выше файла &_in_gen.txt могло бы быть: -1 12
Число 12 означает, что нарушено второе по порядку функциональное ограничение (пользователь сам его формирует, проверяет и т.д.), первые 10-ть ограничений - на параметры.
б) Если при текущем наборе входных параметров xi, i=1,n все ограничения выполнены, то выводим модель в файл &&&_Rab.txt (в первую запись) одно число: значение целевой функции. На этом заканчиваем расчет.
Например: 123.175 Разделителем целой и дробной части должна быть точка.
Эта процедура автоматически многократно повторяется (см. рисунок 1).
Подготовив таким образом систему, запускаем стандартный модуль genoptim.exe.
В DOC окне бегущая строка показывает значение критерия качества (целевой функции) по итерациям и значение параметра сходимости, ассоциированного с размером пространства поиска. Бегущая строка останавливается нажатием клавиши «ПРОБЕЛ» и запускается далее клавишей «ENTER». Останов выполняется принудительно нажатием клавиши «1». Закончив счет, целесообразно просмотреть файл z_ЦЕЛЬ_4(21).txt (или z_result.txt), как основной, и вспомогательный файл z_РАЗГОН_0_ (17).txt (или z_selection.txt), где исследуется пространство поиска как начальная фаза процесса оптимизации.
Файл &&_in_X_start.txt предназначен для передачи в систему стартовой точки. Это может быть некоторый базовый вариант.
Файл &&_in_iZEL.txt предназначен для идентификации целочисленных переменных. Единица символизирует целочисленность соответствующей переменной, ноль – произвольное значение в заданном диапазоне. Тогда соответствующая переменная получает только целые значения в заданном диапазоне. Тогда логически не сложно получить и дискретное управление вплоть до качественного ситуационного описания проблемы - оптимизация все равно будет работать.
При необходимости посмотрите read_me_FREE_2.doc и примеры-тексты программ (папка Prog_f90), там это описано несколько по-другому и более подробно.