亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? simopt.pas

?? Delphi 的數學控件
?? PAS
字號:
{ **********************************************************************
  *                           Unit SIMOPT.PAS                          *
  *                            Version 1.3d                            *
  *                    (c) J. Debord, February 2003                    *
  **********************************************************************
  This unit implements simulated annealing for function minimization
  **********************************************************************
  Reference: Program SIMANN.FOR by Bill Goffe
  (http://www.netlib.org/simann)
  ********************************************************************** }

unit simopt;

interface

uses
  fmath, matrices, optim, randnum, stat;

var
  SA_Nt      : Integer;  { Number of loops at constant temperature }
  SA_Ns      : Integer;  { Number of loops before step adjustment }
  SA_Rt      : Float;    { Temperature reduction factor }
  SA_NCycles : Integer;  { Number of cycles }

function SimAnn(Func           : TFuncNVar;
                X, Xmin, Xmax  : TVector;
                Lbound, Ubound : Integer;
                MaxIter        : Integer;
                Tol            : Float;
                var F_min      : Float) : Integer;
{ ----------------------------------------------------------------------
  Minimization of a function of several variables by simulated annealing
  ----------------------------------------------------------------------
  Input parameters : Func    = objective function to be minimized
                     X       = initial minimum coordinates
                     Xmin    = minimum value of X
                     Xmax    = maximum value of X
                     Lbound,
                     Ubound  = indices of first and last variables
                     MaxIter = max number of annealing steps
                     Tol     = required precision
  ----------------------------------------------------------------------
  Output parameter : X       = refined minimum coordinates
                     F_min   = function value at minimum
  ----------------------------------------------------------------------
  Possible results : OPT_OK
                     OPT_NON_CONV
  ---------------------------------------------------------------------- }

implementation

var
  LogFile : Text;  { Stores the result of each minimization step }

  procedure CreateLogFile;
  begin
    Assign(LogFile, LogFileName);
    Rewrite(LogFile);
  end;

  function InitTemp(Func           : TFuncNVar;
                    X, Xmin, Range : TVector;
                    Lbound, Ubound : Integer) : Float;
{ ----------------------------------------------------------------------
  Computes the initial temperature so that the probability
  of accepting an increase of the function is about 0.5
  ---------------------------------------------------------------------- }
  const
    N_EVAL = 50;  { Number of function evaluations }
  var
    F, F1  : Float;    { Function values }
    DeltaF : TVector;  { Function increases }
    N_inc  : Integer;  { Number of function increases }
    I      : Integer;  { Index of function evaluation }
    K      : Integer;  { Index of parameter }
  begin
    DimVector(DeltaF, N_EVAL);

    N_inc := 0;
    F := Func(X);

    { Compute N_EVAL function values, changing each parameter in turn }
    K := Lbound;
    for I := 1 to N_EVAL do
      begin
        X[K] := Xmin[K] + RanMar * Range[K];
        F1 := Func(X);
        if F1 > F then
          begin
            Inc(N_inc);
            DeltaF[N_inc] := F1 - F;
          end;
        F := F1;
        Inc(K);
        if K > Ubound then K := Lbound;
      end;

    { The median M of these N_inc increases has a probability of 1/2.
      From Boltzmann's formula: Exp(-M/T) = 1/2 ==> T = M / Ln(2) }
    if N_inc > 0 then
      InitTemp := Median(DeltaF, 1, N_inc) / LN2
    else
      InitTemp := 1.0;
  end;

  function ParamConv(X, Step        : TVector;
                     Lbound, Ubound : Integer;
                     Tol            : Float) : Boolean;
{ ----------------------------------------------------------------------
  Checks for convergence on parameters
  ---------------------------------------------------------------------- }
  var
    I    : Integer;
    Conv : Boolean;
  begin
    I := Lbound;
    Conv := True;
    repeat
      Conv := Conv and (Step[I] < Max(Tol, Tol * Abs(X[I])));
      Inc(I);
    until (Conv = False) or (I > Ubound);
    ParamConv := Conv;
  end;

  function Accept(DeltaF, T        : Float;
                  var N_inc, N_acc : Integer) : Boolean;
{ ----------------------------------------------------------------------
  Checks if a variation DeltaF of the function at temperature T is
  acceptable. Updates the counters N_inc (number of increases of the
  function) and N_acc (number of accepted increases).
  ---------------------------------------------------------------------- }
  begin
    if DeltaF < 0.0 then
      Accept := True
    else
      begin
        Inc(N_inc);
        if Expo(- DeltaF / T) > RanMar then
          begin
            Accept := True;
            Inc(N_acc);
          end
        else
          Accept := False;
      end;
  end;

  function SimAnnCycle(Func           : TFuncNVar;
                       X, Xmin, Xmax  : TVector;
                       Lbound, Ubound : Integer;
                       MaxIter        : Integer;
                       Tol            : Float;
                       var LogFile    : Text;
                       var F_min      : Float) : Integer;
{ ----------------------------------------------------------------------
  Performs one cycle of simulated annealing
  ---------------------------------------------------------------------- }
  const
    N_FACT = 2.0;  { Factor for step reduction }
  var
    I, Iter, J, K, N_inc, N_acc   : Integer;
    F, F1, DeltaF, Ratio, T, OldX : Float;
    Range, Step, Xopt             : TVector;
    Nacc                          : TIntVector;
  begin
    DimVector(Step, Ubound);
    DimVector(Xopt, Ubound);
    DimVector(Range, Ubound);
    DimVector(Nacc, Ubound);

    { Determine parameter range, step and optimum }
    for K := Lbound to Ubound do
      begin
        Range[K] := Xmax[K] - Xmin[K];
        Step[K] := 0.5 * Range[K];
        Xopt[K] := X[K];
      end;

    { Initialize function values }
    F := Func(X);
    F_min := F;

    { Initialize temperature and iteration count }
    T := InitTemp(Func, X, Xmin, Range, Lbound, Ubound);
    Iter := 0;

    repeat
      { Perform SA_Nt evaluations at constant temperature }
      N_inc := 0; N_acc := 0;
      for I := 1 to SA_Nt do
        begin
          for J := 1 to SA_Ns do
            for K := Lbound to Ubound do
              begin
                { Save current parameter value }
                OldX := X[K];

                { Pick new value, keeping it within Range }
                X[K] := X[K] + (2.0 * RanMar - 1.0) * Step[K];
                if (X[K] < Xmin[K]) or (X[K] > Xmax[K]) then
                  X[K] := Xmin[K] + RanMar * Range[K];

                { Compute new function value }
                F1 := Func(X);
                DeltaF := F1 - F;

                { Check for acceptance }
                if Accept(DeltaF, T, N_inc, N_acc) then
                  begin
                    Inc(Nacc[K]);
                    F := F1;
                  end
                else
                  { Restore parameter value }
                  X[K] := OldX;

                { Update minimum if necessary }
                if F < F_min then
                  begin
                    Xopt[K] := X[K];
                    F_min := F;
                  end;
              end;

          { Ajust step length to maintain an acceptance
            ratio of about 50% for each parameter }
          for K := Lbound to Ubound do
            begin
              Ratio := Int(Nacc[K]) / Int(SA_Ns);
              if Ratio > 0.6 then
                begin
                  { Increase step length, keeping it within Range }
                  Step[K] := Step[K] * (1.0 + ((Ratio - 0.6) / 0.4) * N_FACT);
                  if Step[K] > Range[K] then Step[K] := Range[K];
                end
              else if Ratio < 0.4 then
                { Reduce step length }
                Step[K] := Step[K] / (1.0 + ((0.4 - Ratio) / 0.4) * N_FACT);

              { Restore counter }
              Nacc[K] := 0;
            end;
        end;

      if WriteLogFile then
        WriteLn(LogFile, Iter:4, '   ', T:12, '   ', F:12, N_inc:6, N_acc:6);

      { Update temperature and iteration count }
      T := T * SA_Rt;
      Inc(Iter);
    until ParamConv(Xopt, Step, Lbound, Ubound, Tol) or (Iter > MaxIter);

    for K := Lbound to Ubound do
      X[K] := Xopt[K];

    if Iter > MaxIter then
      SimAnnCycle := OPT_NON_CONV
    else
      SimAnnCycle := OPT_OK;
  end;

  function SimAnn(Func           : TFuncNVar;
                  X, Xmin, Xmax  : TVector;
                  Lbound, Ubound : Integer;
                  MaxIter        : Integer;
                  Tol            : Float;
                  var F_min      : Float) : Integer;
  var
    Cycle, ErrCode : Integer;
  begin
    if WriteLogFile then
      CreateLogFile;

    { Initialize the Marsaglia random number generator
      using the standard Pascal generator }
    Randomize;
    RMarIn(Random(10000), Random(10000));

    Cycle := 1;
    repeat
      if WriteLogFile then
        begin
          WriteLn(LogFile, 'Simulated annealing: Cycle ', Cycle);
          WriteLn(LogFile);
          WriteLn(LogFile, 'Iter         T              F        Inc   Acc');
        end;

      ErrCode := SimAnnCycle(Func, X, Xmin, Xmax, Lbound, Ubound,
                             MaxIter, Tol, LogFile, F_min);

      Inc(Cycle);
    until (Cycle > SA_NCycles) or (ErrCode <> OPT_OK);

    if WriteLogFile then
      Close(LogFile);

    SimAnn := ErrCode;
  end;

begin
  SA_Nt      := 5;
  SA_Ns      := 15;
  SA_Rt      := 0.9;
  SA_NCycles := 1;
end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99精品一区二区三区| 亚洲国产综合人成综合网站| 日本道免费精品一区二区三区| 亚洲国产欧美在线人成| 国产日产欧美一区二区三区| 欧美亚一区二区| 国产成人精品免费看| 婷婷综合久久一区二区三区| 国产精品女同互慰在线看| 日韩欧美一区在线| 色欧美88888久久久久久影院| 久久www免费人成看片高清| 亚洲图片欧美视频| 中文字幕中文乱码欧美一区二区| 欧美一区永久视频免费观看| 色婷婷激情综合| 成人性视频免费网站| 午夜精品久久久久久久久久久| 国产精品免费av| 精品欧美乱码久久久久久| 欧美在线观看你懂的| 成人深夜福利app| 国产自产2019最新不卡| 日韩精品色哟哟| 亚洲成人动漫精品| 亚洲精品成人a在线观看| 中文字幕在线视频一区| 久久久99久久| 精品粉嫩超白一线天av| 制服.丝袜.亚洲.另类.中文 | 狠狠网亚洲精品| 天堂久久一区二区三区| 一区二区理论电影在线观看| 一区在线观看视频| 综合欧美亚洲日本| 国产精品久久久久一区| 中文字幕免费不卡| 久久精品夜色噜噜亚洲a∨| 精品电影一区二区| 久久影院视频免费| 久久综合久久鬼色中文字| 亚洲精品在线三区| 久久久一区二区三区| 久久亚区不卡日本| 国产欧美精品一区二区三区四区| 久久综合狠狠综合久久综合88| 精品久久久久香蕉网| 久久青草欧美一区二区三区| 国产欧美精品日韩区二区麻豆天美| 久久亚洲精品国产精品紫薇| 国产清纯白嫩初高生在线观看91| 久久精品水蜜桃av综合天堂| 中文在线一区二区| 综合久久久久久久| 一级特黄大欧美久久久| 亚洲国产欧美日韩另类综合| 五月激情综合网| 久久精品国产精品青草| 国产精品自产自拍| 99综合影院在线| 在线一区二区三区做爰视频网站| 欧美日韩在线综合| 日韩欧美综合在线| 国产色产综合色产在线视频| 中文字幕亚洲不卡| 亚洲影院久久精品| 亚洲一区二区在线播放相泽| 午夜久久久久久| 国产乱子伦视频一区二区三区| 成人的网站免费观看| 91在线免费看| 91精品国产乱| 国产精品欧美一级免费| 亚洲一区二区成人在线观看| 久久国产精品一区二区| 成人avav在线| 在线播放日韩导航| 国产日本欧洲亚洲| 夜夜夜精品看看| 国内精品不卡在线| 欧美三级电影在线观看| 久久久综合网站| 一区二区三区中文免费| 久久99国产精品免费网站| 波多野结衣中文字幕一区二区三区| 欧美色欧美亚洲另类二区| 久久色在线观看| 伊人性伊人情综合网| 激情国产一区二区| 在线欧美一区二区| 久久久久久毛片| 午夜国产不卡在线观看视频| 国产在线精品一区二区| 欧洲国内综合视频| 成人一区二区三区中文字幕| 欧美亚洲免费在线一区| 精品国产乱码久久久久久图片| 欧美国产视频在线| 亚洲与欧洲av电影| 成人一道本在线| 欧美日本高清视频在线观看| 久久美女高清视频| 一区二区三区精品视频| 国产中文字幕一区| 欧美亚洲一区二区在线观看| 久久免费精品国产久精品久久久久 | 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 欧美在线一二三四区| 制服丝袜亚洲精品中文字幕| 亚洲欧美在线观看| 麻豆免费看一区二区三区| 成av人片一区二区| 欧美刺激脚交jootjob| 日韩一区有码在线| 国产不卡免费视频| 日韩女同互慰一区二区| 一区二区成人在线观看| 韩国理伦片一区二区三区在线播放 | 欧美三级电影精品| 欧美极品另类videosde| 日本不卡高清视频| 99久久国产综合精品色伊| 日韩精品在线看片z| 一区二区三区美女视频| 成人黄色片在线观看| 日韩一卡二卡三卡四卡| 亚洲免费观看高清完整版在线观看 | 久久九九久精品国产免费直播| 性感美女久久精品| 色视频欧美一区二区三区| 久久久久国产精品麻豆| 精品一区二区在线观看| 欧美久久一区二区| 亚洲靠逼com| av福利精品导航| 国产婷婷一区二区| 日韩激情av在线| 91蝌蚪porny九色| 久久久国产一区二区三区四区小说| 日本一道高清亚洲日美韩| 7777精品伊人久久久大香线蕉经典版下载 | 精品写真视频在线观看| 欧美视频一区二区| 玉足女爽爽91| 99久久99久久综合| 一区在线播放视频| aa级大片欧美| 综合色天天鬼久久鬼色| 9久草视频在线视频精品| 中文字幕免费不卡| 国产美女视频一区| 中文字幕乱码日本亚洲一区二区| 激情六月婷婷综合| 亚洲精品在线观看网站| 美国精品在线观看| 日韩精品一区二区三区四区| 韩国理伦片一区二区三区在线播放| 欧美变态tickling挠脚心| 免费的国产精品| 精品久久人人做人人爰| 国产美女一区二区| 欧美精品一区二区精品网| 国产精品99久久久久久似苏梦涵| 国产精品美女久久久久久2018 | 麻豆久久久久久久| 欧美精品一区二| 国产精品性做久久久久久| 国产欧美日韩在线看| 成人午夜大片免费观看| 亚洲乱码精品一二三四区日韩在线 | 亚洲国产精品影院| 在线精品观看国产| 蜜桃视频一区二区| 久久久久久久综合| av影院午夜一区| 亚洲高清免费观看高清完整版在线观看 | 久久精品国产成人一区二区三区| 日韩欧美不卡一区| 成人免费的视频| 亚洲一区二区综合| 欧美一区二区三区精品| 国产一区二区三区精品欧美日韩一区二区三区 | 在线观看亚洲a| 另类专区欧美蜜桃臀第一页| 久久久久久久久久久久久女国产乱 | 国产精品久久久久影视| 色婷婷激情久久| 亚洲不卡av一区二区三区| 亚洲精品一线二线三线无人区| 成人午夜碰碰视频| 一区二区三区欧美| 亚洲精品一区二区三区影院| 成人久久久精品乱码一区二区三区 | 日韩一级片网站| 国内精品伊人久久久久av一坑| 一区二区在线观看免费| 精品国产乱码久久久久久夜甘婷婷 | 欧美视频在线观看一区| 国产真实乱偷精品视频免| 日本一区二区在线不卡|