Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
 Аватар для sanek77736
5 / 5 / 4
Регистрация: 07.11.2012
Сообщений: 77

Метод Нелдера-Мида (деформируемого многогранника)

07.11.2014, 15:23. Показов 4027. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста отредактировать код программы под любой Паскаль.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
 Program Nelder_Mid;
 
 {$APPTYPE CONSOLE}
 
 Type
      TFloat  = Extended;
 Const
      N_S  = 3; { Максимальное число  переменных }
      Max_Float  = 1.0e4932;
 Type
      Vector  = Array[1..Succ(N_S)] Of TFloat;
      Matrix  = Array[1..Succ(N_S), 1..N_S]  Of TFloat;
      OptimFunc  = Function(N: Byte; X: Vector):  TFloat;
 Var
      X        : Vector;
      H,  Fmin : TFloat;
      It       : Integer;
 { Функция оптимизации  }
 Function OFunc(N: Byte;  X: Vector): TFloat; FAR;
 Begin
    OFunc:=100*Sqr(X[2]  - 1) + Sqr(X[1] + 2);
 End;
 
 {**************************** *****************************************}
 {*   Процедура Simplex.        *}
 {*    Оптимизация  функции многих переменных методом  Hелдера-Мида     *}
 {*  (модифицированный  симплексный метод Спендли-Хекста-Химсворта).    *}
 {*        *}
 {*  Входные  параметры  :       *}
 {*   N - Число  переменных;         *}
 {* Eps - Точность определения  минимума;        *}
 {*   X - Hа  входе процедуры содержит начальное  прибли-   *}
 {*        жение к экстремуму;        *}
 {*   H - Шаг;        *}
 {*  IT - Допустимое  число итераций;        *}
 {*        OFunc - Внешняя процедура  оптимизируемой функции.        *}
 {*        *}
 {*  Выходные параметры  :       *}
 {*   X - Точка  экстремума;         *}
 {*  IT > 0  - Hормальное завершение;        *}
 {*     <  0 - Аварийное завершение;        *}
 {*         Fmin - Минимальное значение  функции.        *}
 {**************************** *****************************************}
 Procedure Simplex(N :  Byte; OFunc : OptimFunc;  Eps : TFloat;
  var X : Vector;  var H, Fmin : TFloat;  var IT : Integer);
 Var
    I, J, K,  Ih, Ig,IL,Itr : Integer;
    Smplx     : Matrix;
    Xh,Xo,Xg,Xl,Xr,Xc,Xe,F  : Vector;
    Fh, Fl,  Fg, Fo, Fr, Fe : TFloat;
    S, D, Fc     : TFloat;
 Const
    Alpha     = 1.1; { Коэф.  отражения  }
    Betta     = 0.5; { Коэф.  сжатия     }
    Gamma     = 2.0; { Коэф.  растяжения }
 Begin
     { Hачальное  приближение X[i] }
    For i:=1  To N Do Smplx[1,i]:=X[i];
     { Построение  симплекса на начальном приближении  X[i] }
    For i:=2  To Succ(N) Do
        For j:=1 To N Do
  If j = pred(i)  Then Smplx[i,j]:=Smplx[1,j] +  H
  Else Smplx[i,j]:=Smplx[1,j];
     { Значение  функции F[i] на вершинах  симплекса }
    For i:=1  To Succ(N) Do
    Begin
        For j:=1 To N Do X[j]:=Smplx[i,j];
        F[i]:=OFunc(N, X);
    End;
    Itr:=0; Eps:=Abs(Eps);  IT:=Abs(IT);
     { Цикл  итераций }
    REPEAT
{ Max и Min на  вершинах }
        Fh:=-Max_Float; Fl:=Max_Float;
        For i:=1 To Succ(N) Do
        Begin
  If F[i]>Fh Then  Begin Fh:=F[i]; Ih:=i End;
  If F[i]<Fl Then  Begin Fl:=F[i]; IL:=i End;
        End;
 
        Fg:=-Max_Float;
        For i:=1 To Succ(N) Do
 If (F[i]>Fg)and(i<>Ih)  Then Begin Fg:=F[i]; Ig:=i  End;
{ Дополнительные точки симплекса  }
        For j:=1 To N Do
        Begin
  Xo[j]:=0; { Центр  тяжести }
  For i:=1 To Succ(N)  Do If i<>Ih Then Xo[j]:=Xo[j]+Smplx[i,j];
  Xo[j]:=Xo[j]/N;  {  Среднее арифмет. }
  Xh[j]:=Smplx[Ih,j];
  Xl[j]:=Smplx[IL,j];
  Xg[j]:=Smplx[Ig,j];
        End;
        Fo:=OFunc(N, Xo); { Значение  в центре тяжести }
 
{ ОТРАЖЕHИЕ с коэф.  Alpha}
        For j:=1 To N Do Xr[j]:=Xo[j]  + Alpha*(Xo[j]-Xh[j]);
        Fr:=OFunc(N, Xr); { Значение  в точке Xr }
 
        If Fr<Fl Then
        Begin
   { РАСТЯЖЕHИЕ  с коэф. Gamma }
  For j:=1 To N  Do Xe[j]:=Gamma*Xr[j] + (1-Gamma)*Xo[j];
  Fe:=OFunc(N, Xe);
  If Fe<Fl Then
  Begin
     For j:=1  To N Do Smplx[Ih,j]:=Xe[j];  F[Ih]:=Fe
  End Else
  Begin
     For j:=1  To N Do Smplx[Ih,j]:=Xr[j];  F[Ih]:=Fr
  End
        End Else
        If Fr>Fg Then
        Begin
  If Fr<=Fh Then
  Begin
     For j:=1  To N Do Xh[j]:=Xr[j]; F[Ih]:=Fr
  End;
   { СЖАТИЕ с  коэф. Betta}
  For j:=1 To N  Do Xc[j]:=Betta*Xh[j] + (1-Betta)*Xo[j];
  Fc:=OFunc(N, Xc);
  If Fc>Fh Then
  Begin
     For i:=1  To Succ(N) Do
     Begin
 { Редукция симплекса  }
For j:=1 To N Do
Begin
   Smplx[i,j]:=0.5*(Smplx[i,j]  + Xl[j]);
   X[j]:=Smplx[i,j]
End;
F[i]:=OFunc(N, X);
     End
  End Else
  Begin
     For j:=1  To N Do Smplx[Ih,j]:=Xc[j];  F[Ih]:=Fc
  End
        End Else
        Begin
  For j:=1 To N  Do Smplx[Ih,j]:=Xr[j]; F[Ih]:=Fr
        End;
 
        { Оценка стандартного отклонения  (с.к. значения) }
        S:=0; D:=0;
        For i:=1 To Succ(N) Do  Begin S:=S + F[i]; D:=D  + Sqr(F[i]) End;
        S:=Sqrt(Abs((D - Sqr(S)/Succ(N))/Succ(N)));
        Inc(Itr);
    UNTIL (S<=Eps) or (Itr>IT);
 
    If Itr>IT  Then IT:=-Itr Else IT:=Itr;
    X:=XL;   { Вектор решения }
    Fmin:=F[IL];  { Минимальное значение функции  }
 End;
 
 Begin
      X[1]:=1.5;  X[2]:=0.2; { Hачальное пpиближение  }
      H:=0.5;  It:=80;
      Simplex(2,  OFunc, 1.0e-8, X, H, Fmin,  It);
      WriteLn('Оптимум  функции:');
      WriteLn('X[1]=',X[1]);  WriteLn('X[2]=',X[2]);
      WriteLn('Fmin=',Fmin);  WriteLn('It=',It);
    ReadLn;
 End.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.11.2014, 15:23
Ответы с готовыми решениями:

Многомерная нелинейная оптимизация. Метод Нелдера-Мида
Ребята помогите, подскажите как сделать. В программировании не силён вообще. Учусь на гидравлика, но для диплома необходимо написать...

Метод Нелдера-Мида(деформируемого многогранника)
Здравствуйте, прошу помочь, никак не могу понять как запрограммировать метод деформируемого многогранника, кому не сложно, не могли бы вы...

Решение задач безусловной и условной оптимизации методом переменного многогранника Нелдера-Мида
Помогите написать программу на C# для решения задач безусловной и условной оптимизации методом переменного многогранника Нелдера-Мида

9
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,433
07.11.2014, 18:33
fpc - ok без правок
BP 7 - добавить {$E+} {$N+} (или галочку поставить на мат. сопроцессоре) и убрать {$APPTYPE CONSOLE}
1
 Аватар для sanek77736
5 / 5 / 4
Регистрация: 07.11.2012
Сообщений: 77
13.11.2014, 14:54  [ТС]
Всё равно ругается и выдаёт ошибку.
0
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,433
13.11.2014, 15:22
Ничего не ругается и ошибок нет.
Давайте скриншот своей ошибки.
0
 Аватар для sanek77736
5 / 5 / 4
Регистрация: 07.11.2012
Сообщений: 77
10.12.2014, 12:14  [ТС]
Спасибо за помощь. Как я понимаю, тут нельзя задать начальную точку? x0
0
 Аватар для sanek77736
5 / 5 / 4
Регистрация: 07.11.2012
Сообщений: 77
20.12.2014, 17:59  [ТС]
ZX Spectrum-128,
а можно ещё вопрос? А эта программа способна другой пример решать?
была функция : OFunc:=100*Sqr(X[2] - 1) + Sqr(X[1] + 2);
я хочу свою написать: OFunc:=(X[1]-4*X[2])^2+(X[2]+5)^2
увы, но он таким образом квадрат не понимает...
0
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,433
20.12.2014, 19:35
x^2 это sqr(x)
Просто замените и получится.
0
 Аватар для sanek77736
5 / 5 / 4
Регистрация: 07.11.2012
Сообщений: 77
21.12.2014, 10:19  [ТС]
ZX Spectrum-128, дело в том, что ответ получается ( -2;-5 ) , хотя на самом деле х1 должен быть равен -20 , х2 равен -5. ( вот уравнение - OFunc:=(sqr(X[1]-4*X[2]))+(sqr(X[2]+5)); )
0
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,433
21.12.2014, 10:22
sanek77736, нуууу. Тут уж я вряд ли я смогу помочь. В метод сам надо лезть. Этот метод мы изучали лет 25 назад, я реально уже не помню.
Может быть, кто-то из гуру заглянет на минутку.
0
 Аватар для sanek77736
5 / 5 / 4
Регистрация: 07.11.2012
Сообщений: 77
21.12.2014, 10:28  [ТС]
ZX Spectrum-128, всё равно, спасибо Вам огромное) Буду дальше сам разбираться!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.12.2014, 10:28
Помогаю со студенческими работами здесь

Метод деформируемого многогранника
Здравствуйте! мне нужно запрограммировать метод деформируемого многогранника на делфи При таком коде Делфи выдает ошибку.Подскажите...

Метод деформируемого многогранника
Здравствуйте! мне нужно запрограммировать метод деформируемого многогранника на делфи При таком коде Делфи выдает ошибку.Подскажите...

Метод Нелдера-Мида
нашел код в книге, должна быть рабочая. Как ее запустить? в матлабе вообще не разбираюсь (метод Нелдера-Мида) ...

Метод Нелдера Мида на C#
Просто даже не пойму с чего начать. Есть код на С но как его портировать мне не совсем понятно. #include &lt;iostream.h&gt; #include...

Метод нелдера-мида
Помогите пожалуйста написать программу. На delphi 7. Нахождение минимума функции методом нелдера-мида. Не могу разобраться в алгоритме.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru