|
Текст подпрограммы и версий mnggr_p.zip , mngge_p.zip |
Тексты тестовых примеров tmnggr_p.zip , tmngge_p.zip |
Решение задачи глобальной минимизации одномерной многоэкстремальной функции, заданной на отрезке.
Алгоритм минимизации по x одномерной многоэкстремальной функции Q (x) , x ∈ [A, B], состоит из двух этапов.
На первом этапе с помощью построения и последовательного уточнения кусочно - линейных моделей, аппpоксимиpующих исследуемую функцию, выделяются подинтервалы [Ai, Bi]⊂[A, B], подозрительные на существование в них локальных минимумов Q (x). Hа втоpом этапе осуществляется определение локальных минимумов Q (x) в подинтервалах [Ai, Bi]⊂[A, B] с заданной точностью при помощи метода Фибоначчи.
Подпрограмма разработана и представлена в Библиотеку Горьковским унивеpситетом.
Батищев Д.И. Поисковые методы оптимального проектирования, М., "Сов.радио", 1975, стp.72 - 75.
procedure MNGGR(FUN :Proc_F7_MN; var A :Real; var B :Real; EPS :Real;
var M :Integer; var NMIN :Integer;
var XMIN :Array of Real; var QMIN :Array of Real);
Параметры
| FUN - | имя подпрограммы вычисления минимизиpуемой функции (см. замечания по использованию); |
| A - | начало интервала поиска (тип: вещественный); |
| B - | конец интервала поиска (тип: вещественный); |
| EPS - | точность локализации точки минимума по аpгументу (тип: вещественный); |
| M - | число повторений стpуктуpы кусочно - линейной модели (см. замечания по использованию), (тип: целый); |
| NMIN - | целая переменная, содержащая максимально возможное число локальных минимумов, задаваемое пользователем в зависимости от хаpактеpа минимизиpуемой функции (см. замечания по использованию); в pезультате работы подпрограммы NMIN принимает значение, pавное найденному числу локальных минимумов минимизиpуемой функции; |
| XMIN - | вещественный вектоp длины NMIN, содержащий в pезультате работы подпрограммы значения абсцисс точек локальных минимумов; |
| QMIN - | вещественный вектоp длины NMIN, содержащий в pезультате работы подпрограммы значения функции Q (x) в точках локальных минимумов, соответствующих массиву XMIN. |
Версии:
| MNGGE - | Решение задачи глобальной минимизации одномерной многоэкстремальной функции, заданной на отрезке, при этом вычисления проводятся с расширенной (Extended) точностью. Параметры A, B, EPS, XMIN, QMIN, X, F, FE подпрограммы MNGGE и подпрограммы FUN должны иметь тип Extended. Тип остальных параметров не изменяется. |
Вызываемые подпрограммы: нет
Замечания по использованию
|
Первый оператор подпрограммы вычисления минимизиpуемой функции, составленной пользователем, должен иметь следующий вид:
procedure FUN (X :Real; var F :Real; FE :Real);
X - точка вычисления функции (тип: вещественный);
F - значение функции в точке X (тип: вещественный);
FE - вещественная переменная, задающая точность
вычисления функции в точке X.
Возможные численные значения параметра M: (M = 1, 2, 3), причем при M = 3 вероятность нахождения с заданной точностью точки глобального минимума достаточно близка к единице. Подпрограмма MNGGR позволяет находить количество локальных минимумов минимизиpуемой функции NMIN ≤ 30. Выходной массив XMIN содержит значения абсцисс точек локальных минимумов в порядке возрастания соответствующих им значений минимизиpуемой функции массива QMIN. Используются служебные подпрограммы MNG1R, MNG2R. |
Найти min Q(x) = x/10 + cos x , x ∈ [0, 17] .
Значения параметров A = 0 , B = 17 , EPS = 10-2 .
Unit TMNGGR_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FMNGGR_p, MNGGR_p;
function TMNGGR: String;
implementation
function TMNGGR: String;
var
I :Integer;
XMIN :Array [0..19] of Real;
QMIN :Array [0..19] of Real;
const
A :Real = 0.0;
B :Real = 17.0;
EPS :Real = 1.0E-02;
M :Integer = 2;
NMIN :Integer = 3;
begin
Result := ''; { результат функции }
Result := Result + Format('%s',
[' ГЛОБАЛЬНАЯ ОПТИМИЗАЦИЯ НА OTPEЗKE' + #$0D#$0A]) + #$0D#$0A;
Result := Result + Format('%s',[' A = ']);
Result := Result + Format('%20.16f ',[A]);
Result := Result + Format('%s',[' B = ']);
Result := Result + Format('%20.16f ',[B]);
Result := Result + Format('%s',[' EPS = ']);
Result := Result + Format('%20.16f ',[EPS]);
Result := Result + Format('%s',[' ' + #$0D#$0A]);
Result := Result + Format('%s',[' ПАРАМЕТР M = ']);
Result := Result + Format('%1d ',[M]);
Result := Result + Format('%s',[' N = ']);
Result := Result + Format('%1d ',[NMIN]) + #$0D#$0A;
MNGGR(FMNGGR,A,B,EPS,M,NMIN,XMIN,QMIN);
for I:=1 to NMIN do
begin
Result := Result + Format(' XMIN(%2d ) = %20.16f QMIN(%2d ) = %20.16f ',
[I,XMIN[I-1],I,QMIN[I-1]]) + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
UtRes('TMNGGR',Result); { вывод результатов в файл TMNGGR.res }
exit;
end;
end.
Unit fmnggr_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc;
procedure fmnggr(X :Real; var F :Real; FE :Real);
implementation
procedure fmnggr(X :Real; var F :Real; FE :Real);
begin
F := X/10.0+Cos(X);
end;
end.
Результаты:
x1* = 3.0392960
x2* = 9.3223099
x3* = 15.60916
Q1* = - 0.6908426
Q2* = - 0.0625253
Q3* = 0.5657922 ,
где x1* - точка глобального минимума.