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

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

?? dfp.txt

?? 運籌學
?? TXT
字號:
#include "iostream.h"
#include "math.h"

void comput_grad(double (*pf)(double *x),  int n,  double *point,  double *grad);                        //計算梯度
double line_search1(double (*pf)(double *x),  int n,  double *start,  double *direction);        //0.618法線搜索
double line_search(double (*pf)(double *x),   int n,  double *start,  double *direction);        //解析法線搜索
double DFP(double (*pf)(double *x),   int n,   double *min_point);                //無約束變尺度法



//梯度計算模塊
//參數:指向目標函數的指針,變量個數,求梯度的點,結果
void comput_grad(double (*pf)(double *x),
                                  int n,
                                  double *point,
                                  double *grad)
{
        double h=1E-3;
        int i;
        double *temp;
        temp = new double[n];
        for(i=1;i<=n;i++)
        {
                temp[i-1]=point[i-1];
        }
        for(i=1;i<=n;i++)
        {
                temp[i-1]+=0.5*h;
                grad[i-1]=4*pf(temp)/(3*h);
                temp[i-1]-=h;
                grad[i-1]-=4*pf(temp)/(3*h);
                temp[i-1]+=(3*h/2);
                grad[i-1]-=(pf(temp)/(6*h));
                temp[i-1]-=(2*h);
                grad[i-1]+=(pf(temp)/(6*h));
                temp[i-1]=point[i-1];
        }
        delete[] temp;
}

//一維搜索模塊
//參數:指向目標函數的指針,變量個數,出發點,搜索方向
//返回:最優步長
double line_search(
                                   double (*pf)(double *x),
                                   int n,
                                   double *start,
                                   double *direction)
{
        int i;
        double step=0.001;
        double a=0,value_a,diver_a;
        double b,value_b,diver_b;
        double t,value_t,diver_t;
        double s,z,w;
        double *grad,*temp_point;

        grad=new double[n];
        temp_point=new double[n];
        comput_grad(pf,n,start,grad);
        diver_a=0;
        for(i=1;i<=n;i++)
                diver_a=diver_a+grad[i-1]*direction[i-1];
        do
        {
                b=a+step;
                for(i=1;i<=n;i++)
                        temp_point[i-1]=start[i-1]+b*direction[i-1];
                comput_grad(pf,n,temp_point,grad);
                diver_b=0;
                for(i=1;i<=n;i++)
                        diver_b=diver_b+grad[i-1]*direction[i-1];
                if( fabs(diver_b)<1E-10 )
                {
                        delete[] grad;
                        delete[] temp_point;
                        return(b);
                }
                if( diver_b<-1E-15 )
                {
                        a=b;
                        diver_a=diver_b;
                        step=2*step;
                }
        }while( diver_b<=1E-15 );

        for(i=1;i<=n;i++)
                temp_point[i-1]=start[i-1]+a*direction[i-1];
        value_a=(*pf)(temp_point);
        for(i=1;i<=n;i++)
                temp_point[i-1]=start[i-1]+b*direction[i-1];
        value_b=(*pf)(temp_point);

        do
        {
                s=3*(value_b-value_a)/(b-a);
                z=s-diver_a-diver_b;
                w=sqrt( fabs(z*z-diver_a*diver_b) );        //////////////////!!!!!!!!!!!!!!!!!!!!!!
                t=a+(w-z-diver_a)*(b-a)/(diver_b-diver_a+2*w);
                value_b=(*pf)(temp_point);
                for(i=1;i<=n;i++)
                        temp_point[i-1]=start[i-1]+t*direction[i-1];
                value_t=(*pf)(temp_point);
                comput_grad(pf,n,temp_point,grad);
                diver_t=0;
                for(i=1;i<=n;i++)
                        diver_t=diver_t+grad[i-1]*direction[i-1];
                if(diver_t>1E-6)
                {
                        b=t;
                        value_b=value_t;
                        diver_b=diver_t;
                }
                else if(diver_t<-1E-6)
                {
                        a=t;
                        value_a=value_t;
                        diver_a=diver_t;
                }
                else break;
        }while( (fabs(diver_t)>=1E-6) && (fabs(b-a)>1E-6) );

        delete[] grad;
        delete[] temp_point;
        return(t);

}

//無約束變尺度法DFP函數聲明
//
//參數:pf指向目標函數的指針,n變量個數,min_point接受初始點、存放結果
//返回:極小點處函數值
//
double DFP(
                   double (*pf)(double *x),
                   int n,
                   double *min_point
                   )
{
        int i,j;
        int k=0;
        double e=1E-5;
        double g_norm;
                
        double *g0=new double[n];                //梯度
        double *g1=new double[n];
        double *dg=new double[n];

        double *p=new double[n];                //搜索方向 =-g
        double t;                                                //一維搜索步長

        double *x0=new double[n];
        double *x1=new double[n];
        double *dx=new double[n];

        double **H=new double*[n];
        for (i=0; i<n; i++)                H[i] = new double[n];

        double **tempH=new double*[n];
        for (i=0; i<n; i++)                tempH[i] = new double[n];

        double *gH=new double[n];
        double *Hg=new double[n];
        double num1;
        double num2;



        for(i=0;i<n;i++)
                for(j=0;j<n;j++)
                {
                        if(i==j)        H[i][j]=1.0;        // H0=I
                        else        H[i][j]=0.0;
                        tempH[i][j]=0.0;
                }


        for(i=0;i<n;i++)
                x0[i]=min_point[i];        

        comput_grad(pf,n,x0,g0);

        g_norm=0.0;
        for(i=0;i<n;i++)        g_norm=g_norm+g0[i]*g0[i];        
        g_norm=sqrt(g_norm);
        if (g_norm<e) 
        {
                for(i=0;i<n;i++)        min_point[i]=x0[i];

                delete[] g0;                
                delete[] g1;
                delete[] dg;
                delete[] p;
                delete[] x0;
                delete[] x1;
                delete[] dx;
                for (i=0; i<n; i++)                delete[] H[i];
                delete []H;
                for (i=0; i<n; i++)                delete[] tempH[i];
                delete []tempH;
                delete[] gH;
                delete[] Hg;

                return pf(min_point);
        }

        for(i=0;i<n;i++)        p[i]=-g0[i];        

        do
        {
                t=line_search(pf,n,x0,p);                                
                for(i=0;i<n;i++)        x1[i]=x0[i]+t*p[i];
                comput_grad(pf,n,x1,g1);
                g_norm=0.0;
                for(i=0;i<n;i++)        g_norm=g_norm+g1[i]*g1[i];
                g_norm=sqrt(g_norm);
                //cout<<k<<"    "<<x0[0]<<"       "<<x0[1]<<"       "<<g_norm<<"\n";
                if (g_norm<e) 
                {
                        for(i=0;i<n;i++)        min_point[i]=x1[i];

                        delete[] g0;                
                        delete[] g1;
                        delete[] dg;
                        delete[] p;
                        delete[] x0;
                        delete[] x1;
                        delete[] dx;
                        for (i=0; i<n; i++)                delete[] H[i];
                        delete []H;
                        for (i=0; i<n; i++)                delete[] tempH[i];
                        delete []tempH;
                        delete[] gH;
                        delete[] Hg;
                        
                        return pf(min_point);
                }
                for(i=0;i<n;i++)
                {
                        dx[i]=x1[i]-x0[i];
                        dg[i]=g1[i]-g0[i];
                }

                //////////////////求Hk+1的矩陣運算

                //g*H,H*g
                for(i=0;i<n;i++)
                {
                        gH[i]=0.0;
                        Hg[i]=0.0;
                }
                for(i=0;i<n;i++)
                {
                        for(j=0;j<n;j++)
                        {
                                gH[i]=gH[i]+dg[j]*H[j][i];
                                //Hg[i]=Hg[i]+H[i][j]*dg[j];
                                Hg[i]=gH[i];
                        }                        
                }

                //num1,num2
                num1=0.0;
                num2=0.0;
                for(i=0;i<n;i++)
                {
                        num1=num1+dx[i]*dg[i];
                        num2=num2+gH[i]*dg[i];
                }

                //tempH[i][j]
                for(i=0;i<n;i++)
                        for(j=0;j<n;j++)
                                tempH[i][j]=0.0;
                for(i=0;i<n;i++)
                {
                        for(j=0;j<n;j++)
                        {
                                tempH[i][j]=tempH[i][j]+H[i][j];
                                tempH[i][j]=tempH[i][j]+dx[i]*dx[j]/num1;
                                tempH[i][j]=tempH[i][j]-Hg[i]*gH[j]/num2;
                        }
                }

                for(i=0;i<n;i++)
                {
                        for(j=0;j<n;j++)
                        {
                                H[i][j]=tempH[i][j];
                        }
                }
                /////////////////////////////

                //P 
                for(i=0;i<n;i++)        p[i]=0.0;
                for(i=0;i<n;i++)
                {
                        for(j=0;j<n;j++)
                        {
                                p[i]=p[i]-H[i][j]*g1[j];
                        }                        
                }

                for(i=0;i<n;i++)
                {
                        g0[i]=g1[i];
                        x0[i]=x1[i];
                }
                k=k+1;
        }while(g_norm>e);

        for(i=0;i<n;i++)        min_point[i]=x1[i];

        delete[] g0;                
        delete[] g1;
        delete[] dg;
        delete[] p;
        delete[] x0;
        delete[] x1;
        delete[] dx;
        for (i=0; i<n; i++)                delete[] H[i];
        delete []H;
        for (i=0; i<n; i++)                delete[] tempH[i];
        delete []tempH;
        delete[] gH;
        delete[] Hg;

        return pf(min_point);
}

/////////////
double fun(double *x)
{
        return 100*( x[1]-x[0]*x[0] )*( x[1]-x[0]*x[0] ) + (1-x[0])*(1-x[0]);
}

void main()
{
        int n=2;
        double min_point[2]={-5,10};
        double min_value=DFP(fun,n,min_point);
        cout<<min_point[0]<<" and "<<min_point[1]<<"   "<<min_value;

}

//0.618法線搜索
//
//參數:指向目標函數的指針,變量個數,出發點,搜索方向
//返回:最優步長
//
double line_search1(
                                   double (*pf)(double *x),
                                   int n,
                                   double *start,
                                   double *direction)
{
        int i;
        int k;

        double l,a,b,c,u,lamda,t,e;

        double *xa=new double[n];
        double *xb=new double[n];
        double *xc=new double[n];
        double *xl=new double[n];
        double *xu=new double[n];

        
        //確定初始搜索區間
        l=0.001;
        a=0;

        k=0;
        do
        {
                k++;
                c=a+l;
                for(i=0;i<n;i++)
                {
                        xc[i]=start[i]+c*direction[i];
                        xa[i]=start[i]+a*direction[i];
                }
                l=l/3;
        }while( pf(xc) >= pf(xa) );                        // ???

        k=0;
        do
        {
                k++;
                l=2*l;
                b=c+l;
                for(i=0;i<n;i++)
                {
                        xc[i]=start[i]+c*direction[i];
                        xb[i]=start[i]+b*direction[i];
                }
                a=c;
                c=b;
        }while( pf(xb) <= pf(xc) );


        a=0;
        b=0.1;

        //尋優
        t=0.618;
        e=0.000001;

        lamda=b-t*(b-a);
        u=a+t*(b-a);
        
        for(i=0;i<n;i++)
        {
                xl[i]=start[i]+lamda*direction[i];
                xu[i]=start[i]+u*direction[i];
        }

        k=0;
        do
        {
                k++;
                if( pf(xl)<pf(xu) )
                {
                        b=u;
                        u=lamda;
                        lamda=b-t*(b-a);
                }
                else
                {
                        a=lamda;
                        lamda=u;
                        u=t*(b-a);
                }
        }while( b-a>=e );

        lamda=(a+b)/2;

        delete[] xa;
        delete[] xb;
        delete[] xc;
        delete[] xl;
        delete[] xu;
        
        return lamda ;

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人在线视频网站| 久久免费电影网| av成人免费在线观看| 亚洲欧美一区二区三区孕妇| 久久午夜老司机| 精品国产乱码91久久久久久网站| 美女视频免费一区| 亚洲国产精品成人综合| 欧美性xxxxxx少妇| av毛片久久久久**hd| 国产不卡免费视频| 天天色 色综合| 午夜久久久久久久久| 视频一区二区不卡| 免费在线观看精品| 精品一区免费av| 国产精品99精品久久免费| 午夜精品在线视频一区| 日韩中文字幕区一区有砖一区| 日本一区二区三区四区| 亚洲欧洲日本在线| 欧美videos中文字幕| 精品剧情在线观看| 欧美日韩一级片在线观看| 国产成人免费视频网站| 亚洲午夜视频在线观看| 国产精品嫩草影院av蜜臀| 日韩成人免费电影| 国产精品的网站| 美女高潮久久久| 欧美裸体一区二区三区| 欧美中文字幕亚洲一区二区va在线| 91美女片黄在线| 亚洲色图色小说| 色天使色偷偷av一区二区| 国产精品视频免费看| 成人免费一区二区三区视频 | 欧美极品aⅴ影院| 色视频一区二区| 日韩黄色免费网站| 国产激情精品久久久第一区二区 | 一区二区三区精品在线| 欧美美女视频在线观看| 激情文学综合丁香| 一区二区三区四区亚洲| 午夜视频在线观看一区二区| 国产片一区二区| 精品少妇一区二区| 综合网在线视频| 日韩成人伦理电影在线观看| 亚洲在线一区二区三区| 国产亚洲一区二区在线观看| 尤物视频一区二区| 国内精品久久久久影院一蜜桃| 亚洲一区二区三区免费视频| 久久国产精品露脸对白| 91在线观看视频| 日韩午夜三级在线| 欧美一区二区三区四区高清| 中文乱码免费一区二区| 天堂在线一区二区| 成人激情免费视频| 日韩一区二区视频| 欧美日韩激情一区二区三区| 亚洲在线观看免费| 欧美日韩一区久久| 亚洲美女免费视频| 韩日欧美一区二区三区| 香蕉久久夜色精品国产使用方法 | 美女诱惑一区二区| 成人一区二区三区中文字幕| 亚洲六月丁香色婷婷综合久久 | 国产麻豆精品theporn| 亚洲激情图片qvod| 美女在线一区二区| 欧洲精品视频在线观看| 国产大片一区二区| 91精品国产综合久久久久久漫画| 国产精品黄色在线观看| 国产精品1024久久| 精品国产1区二区| 国产成人久久精品77777最新版本| 国产一区二区电影| 欧美亚洲高清一区| 国产精品日产欧美久久久久| 日韩国产欧美在线播放| 一本色道久久综合亚洲91| 国产99精品视频| 欧美女孩性生活视频| 欧美经典一区二区| 国产精品久久久久久久久免费桃花| 国产精品不卡在线观看| 国产主播一区二区| 亚洲激情第一区| 亚洲图片欧美视频| 欧美激情一区二区三区不卡 | 一区二区激情视频| 国产亚洲综合在线| 欧美少妇xxx| 亚洲三级理论片| 青青草原综合久久大伊人精品优势| 欧美三级韩国三级日本三斤| 亚洲精品高清在线| 欧洲精品一区二区| 精品国产麻豆免费人成网站| 肉色丝袜一区二区| 成人夜色视频网站在线观看| 亚洲精品在线一区二区| 国产日本亚洲高清| 亚洲国产日韩一区二区| 懂色av噜噜一区二区三区av| 亚洲国产精品久久久久秋霞影院 | 91福利社在线观看| 91麻豆精品国产91久久久久久 | 26uuu欧美| 91免费小视频| 精品在线播放午夜| 在线精品观看国产| 亚洲免费毛片网站| 免费成人你懂的| 在线不卡一区二区| 亚洲欧美国产毛片在线| 99国产精品久久久久久久久久 | 欧美国产一区二区| 青娱乐精品在线视频| 欧美乱妇20p| 亚洲男人的天堂在线aⅴ视频| 国产一区二区网址| 日韩一区二区精品| 国产真实乱子伦精品视频| 7777精品久久久大香线蕉| 麻豆精品视频在线观看免费| 欧美日韩午夜精品| 久久99国产精品免费网站| 国产偷v国产偷v亚洲高清| 99国内精品久久| 婷婷久久综合九色国产成人| 欧美电视剧免费观看| 午夜精品久久久久久久99水蜜桃| 91在线porny国产在线看| 国产精品网友自拍| 色狠狠av一区二区三区| 天天色 色综合| 国产婷婷色一区二区三区四区| 99精品国产99久久久久久白柏| 香蕉成人啪国产精品视频综合网| 欧美日韩国产欧美日美国产精品| 成人欧美一区二区三区1314| 国产成人av自拍| 亚洲高清一区二区三区| 欧美午夜影院一区| 久久精品国产在热久久| 欧美一区二区久久| 成人黄色综合网站| 国产精品欧美久久久久一区二区| 国产福利91精品| 亚洲午夜一区二区| 精品国产乱码久久久久久免费| 色综合婷婷久久| 一区二区三区鲁丝不卡| 久久综合视频网| 欧美日韩国产高清一区二区| 成人一二三区视频| 色婷婷综合在线| 老司机精品视频线观看86| 欧美日韩一区二区欧美激情| 日韩一级免费一区| 国产精品动漫网站| 日本aⅴ免费视频一区二区三区| 国产精品一区二区在线观看不卡| 成人精品在线视频观看| 欧美日韩国产123区| 一区二区三区不卡视频| caoporen国产精品视频| 日韩免费福利电影在线观看| 国产精品久久久久国产精品日日| 国产精品一区二区在线播放| 亚洲va国产天堂va久久en| 国产欧美一区二区三区网站| 国产一区久久久| 国产三级精品三级| 欧美精品久久久久久久久老牛影院| 粉嫩在线一区二区三区视频| 国产精品久久久久一区二区三区共| 欧美刺激脚交jootjob| 欧美三级蜜桃2在线观看| 99热在这里有精品免费| 亚洲一区二区欧美日韩| 亚洲欧美日韩电影| 国产色婷婷亚洲99精品小说| 日韩限制级电影在线观看| 欧美日韩国产一二三| 欧美在线制服丝袜| 99re在线精品| 成人教育av在线| 成人免费不卡视频| 国产夫妻精品视频| 国产黑丝在线一区二区三区| 精品一区二区三区蜜桃| 中文字幕一区二区三区四区不卡 |