欢迎来到天天文库
浏览记录
ID:40492210
大小:30.29 KB
页数:16页
时间:2019-08-03
《Rosen梯度投影法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、packageXU;importJama.Matrix;/**通用性说明:*当目标函数不同时,程序需修改的地方如下*1、函数getFunction_xy中的f*2、求梯度的函数getGradient*3、线性约束方程组系数矩阵A*4、线性约束方程组矩阵b*5、可行点,初始可行点最好多选择几个不同的去求最值,以避免求出的只是区域极值而不是全域最值*/publicclassRosen{//实现返回函数的代数式,在最优化目标函数的表达式变化时,在这个函数中改即可,避免在进退法和黄金分割法中更改publicstaticdoublegetFunction_xy(doublex,doubley){doub
2、lef=0;f=Math.pow(x,2)*y*(4-x-y);returnf;}//求梯度,注意不同的目标函数,梯度不一样,此函数不具有通用性publicstaticdouble[]getGradient(double[]Xi){double[]Gradient=newdouble[Xi.length];Gradient[0]=Xi[0]*Xi[1]*(8-3*Xi[0]-2*Xi[1]);Gradient[1]=Math.pow(Xi[0],2)*(4-Xi[0]-2*Xi[1]);/*System.out.println();System.out.println("梯度为:");for(
3、inti=0;i4、(Minf[0]+","+Minf[1]+","+Minf[2]);}//以下为各种不需修改的功能函数/*功能:解决二元非线性函数在线性约束条件下的极值问题(投影梯度算法)*注意以下几点(二元情况下):*1、可行点Xi一定为两个元素的向量*2、矩阵A1的大小是变化的,行数是不定的,但列数一定为2。A2的情况与A1一样。b1、b2的行数是变化的,但其列数必为1。*3、矩阵P的大小一定为2x2*4、梯度矩阵的大小一定为2x1*5、矩阵d一定为2x1*6、矩阵w的行数与A1相同,列数为1列*/publicstaticdouble[]getMminf(double[][]A,double[]b,dou5、ble[]Xi){//存储极值点double[]X=newdouble[2];//精度doubleeps=0.00000000000000001;booleanbConti=true;while(bConti){//获得矩阵A1,A2,b1,b2double[][]A1_array=getA1(A,b,Xi);//A1_a为向量pdouble[][]A2_array=getA2(A,b,Xi);double[]b1_array=getb1(A,b,Xi);double[]b2_array=getb2(A,b,Xi);//获得矩阵A1,A2,b1,b2的长度,如果长度为0,则为空//intlen6、_A1row_array=A1_array.length;//A1的行长度(行数)//intlen_A1column_array=A1_array[0].length;//A1的列长度(列数)//intlen_A2row_array=A2_array.length;//intlen_A2column_array=A2_array[0].length;int[]lenA1_array=dGetlen(A1_array);//lenA1_array[0],lenA1_array[1]分别为行数和列数int[]lenA2_array=dGetlen(A2_array);//lenA2_array[07、],lenA2_array[1]分别为行数和列数intlen_b1_array=b1_array.length;intlen_b2_array=b2_array.length;Matrixd=newMatrix(2,1);//创建矩阵d,2行1列inti=0;while(true){double[][]A1sub_array=newdouble[lenA1_array[0]-i][lenA1_ar
4、(Minf[0]+","+Minf[1]+","+Minf[2]);}//以下为各种不需修改的功能函数/*功能:解决二元非线性函数在线性约束条件下的极值问题(投影梯度算法)*注意以下几点(二元情况下):*1、可行点Xi一定为两个元素的向量*2、矩阵A1的大小是变化的,行数是不定的,但列数一定为2。A2的情况与A1一样。b1、b2的行数是变化的,但其列数必为1。*3、矩阵P的大小一定为2x2*4、梯度矩阵的大小一定为2x1*5、矩阵d一定为2x1*6、矩阵w的行数与A1相同,列数为1列*/publicstaticdouble[]getMminf(double[][]A,double[]b,dou
5、ble[]Xi){//存储极值点double[]X=newdouble[2];//精度doubleeps=0.00000000000000001;booleanbConti=true;while(bConti){//获得矩阵A1,A2,b1,b2double[][]A1_array=getA1(A,b,Xi);//A1_a为向量pdouble[][]A2_array=getA2(A,b,Xi);double[]b1_array=getb1(A,b,Xi);double[]b2_array=getb2(A,b,Xi);//获得矩阵A1,A2,b1,b2的长度,如果长度为0,则为空//intlen
6、_A1row_array=A1_array.length;//A1的行长度(行数)//intlen_A1column_array=A1_array[0].length;//A1的列长度(列数)//intlen_A2row_array=A2_array.length;//intlen_A2column_array=A2_array[0].length;int[]lenA1_array=dGetlen(A1_array);//lenA1_array[0],lenA1_array[1]分别为行数和列数int[]lenA2_array=dGetlen(A2_array);//lenA2_array[0
7、],lenA2_array[1]分别为行数和列数intlen_b1_array=b1_array.length;intlen_b2_array=b2_array.length;Matrixd=newMatrix(2,1);//创建矩阵d,2行1列inti=0;while(true){double[][]A1sub_array=newdouble[lenA1_array[0]-i][lenA1_ar
此文档下载收益归作者所有