<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=134789&amp;view=findpost&amp;p=1036770</guid>
        <pubDate>Tue, 07 Mar 2006 13:41:32 +0000</pubDate>
        <title>Минимизация ф-ций многих переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=134789&amp;view=findpost&amp;p=1036770</link>
        <description><![CDATA[Булат Шакиров: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=134789&view=findpost&p=1034323'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Romtek &#064; <time class="tag-quote__quoted-time" datetime="2006-03-05T11:04:43+00:00">05.03.06, 11:04</time></span><div class='quote '>имхо, такое стоило бы скинуть в www.sources.ru/incoming вместо этой темы.</div></div><br>
<strong class='tag-b'>Romtek </strong>Меня в incoming не пускают. Там глюк из-за изменения ника. А присоединиить не догадался. Сорри.  :wub: <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2006-03-07T16:42:23+03:00">07.03.06, 13:42</time></span></span><br>
<strong class='tag-b'> volvo877</strong><br>
10-nx :yes:]]></description>
        <author>Булат Шакиров</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=134789&amp;view=findpost&amp;p=1032662</guid>
        <pubDate>Fri, 03 Mar 2006 12:39:18 +0000</pubDate>
        <title>Минимизация ф-ций многих переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=134789&amp;view=findpost&amp;p=1032662</link>
        <description><![CDATA[Булат Шакиров: <strong class='tag-b'>Оптимизация функции многих переменных методом Hелдера-Мида</strong><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Program SimplexMethod;</div><div class="code_line">Uses Crt;</div><div class="code_line">&nbsp;</div><div class="code_line">Type</div><div class="code_line">TFloat = Extended;</div><div class="code_line">Const</div><div class="code_line">N_S = 3; { Максимальное число переменных }</div><div class="code_line">Max_Float = 1.0e+4932;</div><div class="code_line">Type</div><div class="code_line">Vector = Array[1..Succ(N_S)] Of TFloat;</div><div class="code_line">Matrix = Array[1..Succ(N_S), 1..N_S] Of TFloat;</div><div class="code_line">OptimFunc = Function(N: Byte; X: Vector): TFloat;</div><div class="code_line">Var</div><div class="code_line">X : Vector;</div><div class="code_line">H, Fmin : TFloat;</div><div class="code_line">It : Integer;</div><div class="code_line">{ Функция оптимизации }</div><div class="code_line">Function OFunc(N: Byte; X: Vector): TFloat; FAR;</div><div class="code_line">Begin</div><div class="code_line">OFunc:=4*sqr(X[1]-5)+sqr(X[2]-6);</div><div class="code_line">{OFunc:=2*sqr(X[1])+X[1]*X[2]+sqr(X[2]);}</div><div class="code_line">End;</div><div class="code_line">&nbsp;</div><div class="code_line">{**************************** *****************************************}</div><div class="code_line">{* Процедура Simplex. *}</div><div class="code_line">{* Оптимизация функции многих переменных методом Hелдера-Мида *}</div><div class="code_line">{* *}</div><div class="code_line">{* Входные параметры : *}</div><div class="code_line">{* N - Число переменных; *}</div><div class="code_line">{* Eps - Точность определения минимума; *}</div><div class="code_line">{* X - Hа входе процедуры содержит начальное прибли- *}</div><div class="code_line">{* жение к экстремуму; *}</div><div class="code_line">{* H - Шаг; *}</div><div class="code_line">{* IT - Допустимое число итераций; *}</div><div class="code_line">{* OFunc - Внешняя процедура оптимизируемой функции. *}</div><div class="code_line">{* *}</div><div class="code_line">{* Выходные параметры : *}</div><div class="code_line">{* X - Точка экстремума; *}</div><div class="code_line">{* IT &#62; 0 - Hормальное завершение; *}</div><div class="code_line">{* &#60; 0 - Аварийное завершение; *}</div><div class="code_line">{* Fmin - Минимальное значение функции. *}</div><div class="code_line">{**************************** *****************************************}</div><div class="code_line">Procedure Simplex(N : Byte; OFunc : OptimFunc; Eps : TFloat;</div><div class="code_line">var X : Vector; var H, Fmin : TFloat; var IT : Integer);</div><div class="code_line">Var</div><div class="code_line">I, J, K, Ih, Ig,IL,Itr : Integer;</div><div class="code_line">Smplx : Matrix;</div><div class="code_line">Xh,Xo,Xg,Xl,Xr,Xc,Xe,F : Vector;</div><div class="code_line">Fh, Fl, Fg, Fo, Fr, Fe : TFloat;</div><div class="code_line">S, D, Fc : TFloat;</div><div class="code_line">Const</div><div class="code_line">Alpha = 1.0; { Коэф. отражения }</div><div class="code_line">Betta = 0.5; { Коэф. сжатия }</div><div class="code_line">Gamma = 2.0; { Коэф. растяжения }</div><div class="code_line">Begin</div><div class="code_line">{ Hачальное приближение X[i] }</div><div class="code_line">For i:=1 To N Do Smplx[1,i]:=X[i];</div><div class="code_line">{ Построение симплекса на начальном приближении X[i] }</div><div class="code_line">For i:=2 To Succ(N) Do</div><div class="code_line">For j:=1 To N Do</div><div class="code_line">If j = pred(i) Then Smplx[i,j]:=Smplx[1,j] + H</div><div class="code_line">Else Smplx[i,j]:=Smplx[1,j];</div><div class="code_line">{ Значение функции F[i] на вершинах симплекса }</div><div class="code_line">For i:=1 To Succ(N) Do</div><div class="code_line">Begin</div><div class="code_line">For j:=1 To N Do X[j]:=Smplx[i,j];</div><div class="code_line">F[i]:=OFunc(N, X);</div><div class="code_line">End;</div><div class="code_line">Itr:=0; Eps:=Abs(Eps); IT:=Abs(IT);</div><div class="code_line">{ Цикл итераций }</div><div class="code_line">REPEAT</div><div class="code_line">{ Max и Min на вершинах }</div><div class="code_line">Fh:=-Max_Float; Fl:=Max_Float;</div><div class="code_line">For i:=1 To Succ(N) Do</div><div class="code_line">Begin</div><div class="code_line">If F[i]&#62;Fh Then Begin Fh:=F[i]; Ih:=i End;</div><div class="code_line">If F[i]&#60;Fl Then Begin Fl:=F[i]; IL:=i End;</div><div class="code_line">End;</div><div class="code_line">&nbsp;</div><div class="code_line">Fg:=-Max_Float;</div><div class="code_line">For i:=1 To Succ(N) Do</div><div class="code_line">If (F[i]&#62;Fg)and(i&#60;&#62;Ih) Then Begin Fg:=F[i]; Ig:=i End;</div><div class="code_line">{ Дополнительные точки симплекса }</div><div class="code_line">For j:=1 To N Do</div><div class="code_line">Begin</div><div class="code_line">Xo[j]:=0; { Центр тяжести }</div><div class="code_line">For i:=1 To Succ(N) Do If i&#60;&#62;Ih Then Xo[j]:=Xo[j]+Smplx[i,j];</div><div class="code_line">Xo[j]:=Xo[j]/N; { Среднее арифмет. }</div><div class="code_line">Xh[j]:=Smplx[Ih,j];</div><div class="code_line">Xl[j]:=Smplx[IL,j];</div><div class="code_line">Xg[j]:=Smplx[Ig,j];</div><div class="code_line">End;</div><div class="code_line">Fo:=OFunc(N, Xo); { Значение в центре тяжести }</div><div class="code_line">&nbsp;</div><div class="code_line">{ ОТРАЖЕHИЕ с коэф. Alpha}</div><div class="code_line">For j:=1 To N Do Xr[j]:=Xo[j] + Alpha*(Xo[j]-Xh[j]);</div><div class="code_line">Fr:=OFunc(N, Xr); { Значение в точке Xr }</div><div class="code_line">&nbsp;</div><div class="code_line">If Fr&#60;Fl Then</div><div class="code_line">Begin</div><div class="code_line">{ РАСТЯЖЕHИЕ с коэф. Gamma }</div><div class="code_line">For j:=1 To N Do Xe[j]:=Gamma*Xr[j] + (1-Gamma)*Xo[j];</div><div class="code_line">Fe:=OFunc(N, Xe);</div><div class="code_line">If Fe&#60;Fl Then</div><div class="code_line">Begin</div><div class="code_line">For j:=1 To N Do Smplx[Ih,j]:=Xe[j]; F[Ih]:=Fe</div><div class="code_line">End Else</div><div class="code_line">Begin</div><div class="code_line">For j:=1 To N Do Smplx[Ih,j]:=Xr[j]; F[Ih]:=Fr</div><div class="code_line">End</div><div class="code_line">End Else</div><div class="code_line">If Fr&#62;Fg Then</div><div class="code_line">Begin</div><div class="code_line">If Fr&#60;=Fh Then</div><div class="code_line">Begin</div><div class="code_line">For j:=1 To N Do Xh[j]:=Xr[j]; F[Ih]:=Fr</div><div class="code_line">End;</div><div class="code_line">{ СЖАТИЕ с коэф. Betta}</div><div class="code_line">For j:=1 To N Do Xc[j]:=Betta*Xh[j] + (1-Betta)*Xo[j];</div><div class="code_line">Fc:=OFunc(N, Xc);</div><div class="code_line">If Fc&#62;Fh Then</div><div class="code_line">Begin</div><div class="code_line">For i:=1 To Succ(N) Do</div><div class="code_line">Begin</div><div class="code_line">{ Редукция симплекса }</div><div class="code_line">For j:=1 To N Do</div><div class="code_line">Begin</div><div class="code_line">Smplx[i,j]:=0.5*(Smplx[i,j] + Xl[j]);</div><div class="code_line">X[j]:=Smplx[i,j]</div><div class="code_line">End;</div><div class="code_line">F[i]:=OFunc(N, X);</div><div class="code_line">End</div><div class="code_line">End Else</div><div class="code_line">Begin</div><div class="code_line">For j:=1 To N Do Smplx[Ih,j]:=Xc[j]; F[Ih]:=Fc</div><div class="code_line">End</div><div class="code_line">End Else</div><div class="code_line">Begin</div><div class="code_line">For j:=1 To N Do Smplx[Ih,j]:=Xr[j]; F[Ih]:=Fr</div><div class="code_line">End;</div><div class="code_line">&nbsp;</div><div class="code_line">{ Оценка стандартного отклонения (с.к. значения) }</div><div class="code_line">S:=0; D:=0;</div><div class="code_line">For i:=1 To Succ(N) Do Begin S:=S + F[i]; D:=D + Sqr(F[i]) End;</div><div class="code_line">S:=Sqrt(Abs((D - Sqr(S)/Succ(N))/Succ(N)));</div><div class="code_line">Inc(Itr);</div><div class="code_line">UNTIL (S&#60;=Eps) or (Itr&#62;IT);</div><div class="code_line">&nbsp;</div><div class="code_line">If Itr&#62;IT Then IT:=-Itr Else IT:=Itr;</div><div class="code_line">X:=XL; { Вектор решения }</div><div class="code_line">Fmin:=F[IL]; { Минимальное значение функции }</div><div class="code_line">End;</div><div class="code_line">&nbsp;</div><div class="code_line">BEGIN</div><div class="code_line">ClrScr;</div><div class="code_line">X[1]:=1.5; X[2]:=0.2; { Hачальное пpиближение }</div><div class="code_line">H:=0.5; It:=80;</div><div class="code_line">Simplex(2, OFunc, 1.0e-8, X, H, Fmin, It);</div><div class="code_line">WriteLn(&#39;Оптимум функции:&#39;);</div><div class="code_line">WriteLn(&#39;X[1]=&#39;,X[1]); WriteLn(&#39;X[2]=&#39;,X[2]);</div><div class="code_line">WriteLn(&#39;Fmin=&#39;,Fmin); WriteLn(&#39;It=&#39;,It);</div><div class="code_line">ReadLn;</div><div class="code_line">END.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Булат Шакиров</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=134789&amp;view=findpost&amp;p=1032570</guid>
        <pubDate>Fri, 03 Mar 2006 11:09:57 +0000</pubDate>
        <title>Минимизация ф-ций многих переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=134789&amp;view=findpost&amp;p=1032570</link>
        <description><![CDATA[Булат Шакиров: <strong class='tag-b'>Метод наискорейшего спуска</strong><br>
<br>
<span class="tag-color tag-color-named" data-value="blue" style="color: blue">(присоединил в архиве из-за размера исходника)</span>]]></description>
        <author>Булат Шакиров</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      </channel>
      </rss>
	