top.mail.ru

ПОИСК ГЛОБАЛЬНОГО ОПТИМУМА ДЛЯ ЗАДАЧ ОПТИМАЛЬНОГО ПРОЕКТИРОВАНИЯ СИСТЕМ ИЛИ ОПРЕДЕЛЕНИЯ ОПТИМАЛЬНЫХ ЗАКОНОВ УПРАВЛЕНИЯ.

ИСПОЛЬЗОВАНИЕ


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

Поиск оптимального решения может быть выполнен несколькими путями (рис. 1):
GUI
Рис. 1.

МАТЕМАТИЧЕСКАЯ МОДЕЛЬ


Для описания объекта оптимизации используеться структура данных которая описывает математически исследуемый объект и задает начальные, граничные условия, а также критерий поиска глобального оптимума. Модель описывается по правилам создания классов для языка програмирования Java (наследует класс OptimizationModelObject) и имеет следующую структуру:

public class test_001 extends OptimizationModelObject{

  // Интервалы входных параметров
  private float[][] interval_x = {
    {48.0f, 112.0f},
    {20.7f, 62.1f},
    {3.0f, 5.0f},
  };

  // Метод возвращает масив с интервала входных параметров
  public float[][] get_interval(){ return interval_x;  }

  // Метод возвращает значение дискретизации области входных параметров
  public int get_digitization_area_values(){ return 3; }

  // Метод возвращает значение дискретизации области значений
  public int get_digitization_values(){ return 100; }

  // Метод возвращает значение относительной точности
  public float get_precision(){ return 0.001f; }

  // Метод возвращает значение критерия оптимизации
  // Минимум = -Double.MAX_VALUE
  // Максимум = Double.MAX_VALUE
  public double get_criterion_optimization(){ return -Double.MAX_VALUE; }

  // Метод используется для включения(true) / выключения(false) вывода на экран промежуточных расчетов
  public boolean is_debug(){return false;}

  // Метод описывает модель и возвращает значение параметра оптимизации
  // X - масив входных параметров
  public double function(double[] X){
    double y = 0.3000000019868215 -0.17749999463558197*(X[0]-48.0)/64.0 + 0.1262500025331974*(X[1]-20.7)/41.399998 + 0.14874999597668648*(X[2]-3.0)/2.0 -0.14750000089406967*(X[0]-48.0)/64.0*(X[0]-20.7)/41.399998 -0.16249998658895493*(X[0]-48.0)/64.0*(X[0]-3.0)/2.0 + 0.06499999761581421*(X[1]-20.7)/41.399998*(X[1]-3.0)/2.0 + 0.11000000437100729*Math.pow((X[0]-48.0)/64.0,2) + 0.022500005861123412*Math.pow((X[1]-20.7)/41.399998,2) + 0.0774999832113584*Math.pow((X[2]-3.0)/2.0,2);
    return y;
  }
}
После описания модели в ее сохраняют в файле с именем класса test_001.* и расширением *.java (test_001.java). Полученный файл модели (test_001.java) необходимо откомпелировать используя команду:

для Windows - javac -cp .;OptimizationModel.jar test_001.java
для Linux/Unix - javac -cp .:OptimizationModel.jar test_001.java

При успешной компиляции будет создан файл с тем же именем test_001.* и с расширением *.class (test_001.class).


ПОИСК ГЛОБАЛЬНОГО ОПТИМУМА

Для запуска поиска глобального оптимума достаточно использовать команду с консоли java [CLASSPATH] OptimizationModelSolver [SOLVER] <MODEL>
где:
CLASSPATH - параметр описывает путь к библиотеке OptimizationModel.jar;
SOLVER - параметр указывает какую методику использовать (aam aaqm gzm), если ни один парамтр не указан тогда используются все методики;
MODEL - имя файла математической модели.

Пример поиска глобального оптимума для модели - test_001
Операционная система
Командная строка
Windows java -cp .;OptimizationModel.jar OptimizationModelSolver test_001
Linux/Unix java -cp .:OptimizationModel.jar OptimizationModelSolver test_001


При запуске OptimizationModelSolver будет проведен поиск глобального оптимума с использованием нескольких методик.
Результат расчета примера модели test_001 представлен ниже.
*** Start optimization ***

Sat Mar 20 04:51:59 EET 2010
Number of processors/thread:  2/4
Loading model:  test_pe_001_1269053514510
Thread: 33-48   (time: 3) 	Y(X1, ..., Xn) = -8.94903307855923
Thread: 49-64   (time: 4) 	Y(X1, ..., Xn) = -4.684240944984636
Thread: 17-32   (time: 4) 	Y(X1, ..., Xn) = -8.94903307855923
Thread: 1-16   (time: 4) 	Y(X1, ..., Xn) = -8.94903307855923
Solver:	AAQM
Solving time (hh:mm:ss) 00:00:00 	(total: 4 ms)

Matrix of parameters of model
X1 = 48.0 	... 	112.0
X2 = 20.7 	... 	62.1
X3 = 3.0 	... 	5.0

Optimal Result for Y(X1, ..., Xn) = -8.94903307855923

X1 = 112.0   	X2 = 20.700000762939453   	X3 = 3.0   	

*** End optimization ***


*** Start optimization ***

Sat Mar 20 04:51:59 EET 2010
Number of processors/thread:  2/4
Loading model:  test_pe_001_1269053514510
Thread: 17-32   (time: 2) 	Y(X1, ..., Xn) = -8.94903307855923
Thread: 1-16   (time: 2) 	Y(X1, ..., Xn) = -8.94903307855923
Thread: 33-48   (time: 2) 	Y(X1, ..., Xn) = -8.94903307855923
Thread: 49-64   (time: 5) 	Y(X1, ..., Xn) = -4.684240944984636
Solver:	AAM
Solving time (hh:mm:ss) 00:00:00 	(total: 5 ms)

Matrix of parameters of model
X1 = 48.0 	... 	112.0
X2 = 20.7 	... 	62.1
X3 = 3.0 	... 	5.0

Optimal Result for Y(X1, ..., Xn) = -8.94903307855923

X1 = 112.0   	X2 = 20.700000762939453   	X3 = 3.0   	

*** End optimization ***


*** Start optimization ***

Sat Mar 20 04:51:59 EET 2010
Number of processors/thread:  2/4
Loading model:  test_pe_001_1269053514510
Thread: 33-48   (time: 31) 	Y(X1, ..., Xn) = -8.94903307855892
Thread: 17-32   (time: 54) 	Y(X1, ..., Xn) = -8.94903307855892
Thread: 49-64   (time: 30) 	Y(X1, ..., Xn) = -8.94903307855892
Thread: 1-16   (time: 28) 	Y(X1, ..., Xn) = -8.94903307855892
Solver:	GZM
Solving time (hh:mm:ss) 00:00:00 	(total: 54 ms)

Matrix of parameters of model
X1 = 48.0 	... 	112.0
X2 = 20.7 	... 	62.1
X3 = 3.0 	... 	5.0

Optimal Result for Y(X1, ..., Xn) = -8.94903307855892

X1 = 111.99999999999864   	X2 = 20.700000762939453   	X3 = 3.0   	

*** End optimization ***



В результате расчета примера модели test_001 для функции Y(X1, X2, X3)=... найдены значения Х1, Х2, Х3 при которых Y стримится к минимуму.
Методика X1 X2 X3 Время решения Количество итераций
aaqm 112.0 20.700000762939453 3.0 4 ms 384
aam 112.0 20.700000762939453 3.0 5 ms 768
gzm 111.99999999999864 20.700000762939453 3.0 54 ms 134912