




已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
最優(yōu)化理論方法課 程 實 驗 報 告 項目名稱:最優(yōu)化學生班級:學生姓名:學生學號:完成日期:2015-11-01問題:1用黃金分割法求解,已知初始單谷區(qū)間,要求精度2用拋物線插值法求解,已知初始單谷區(qū)間解法:1、 本次計算采用java語言編程根據(jù)題意,定下如下變量變量與方法符號數(shù)據(jù)類型說明Gold_Optimal()String遞歸方法主體,完成求解,輸出最優(yōu)解坐標Function()double命題函數(shù),返回函數(shù)值a_k,b_kdouble區(qū)間值,初始值為0,a_k,b_k表示區(qū)間a_n,b_ndouble兩個探測點,無初始值,a_n-0.382,b_n-0.618GOLD_LINE_UPfinal double0.618GOLD_LINE_DOWMfinal double0.382Ldouble精確度,定值為0.001主體遞歸如下public static String Gold_Optimal(double a,double b,double l) a_k = a ; /給區(qū)間賦值 b_k = b ; /給區(qū)間賦值 if(a_n=0) a_n = a_k + GOLD_LINE_DOWM*(b_k - a_k) ; /給探測點賦初始值 if(b_n=0) b_n = a_k + GOLD_LINE_UP*(b_k - a_k) ; /給探測點賦初始值 if(b_k - a_k)funtion(b_n)/遞歸分類,計算探測點b_n型 a_k = a_n ; a_n = b_n ; b_n = a_k + GOLD_LINE_UP*(b_k - a_k) ; else/遞歸分類,計算探測點a_n型 b_k = b_n ; b_n = a_n ; a_n = a_k + GOLD_LINE_DOWM*(b_k - a_k) ; return Gold_Optimal(a_k,b_k,l) ; 以上實現(xiàn)了計算最小值的遞歸操作,給初始探測點賦值也并到遞歸中,但設(shè)定了條件,他們都只能執(zhí)行一次,在遞歸中也分成了兩個類別。但是還差一個函數(shù)值,其實現(xiàn)如下:public static double funtion(double a) return a*(a + 2) ; 接著是主方法如下:public static void main(String args) System.out.println(Gold_Optimal(-3f,5f,0.001f); 輸出如下:2、本題同樣是采用java語言編程實現(xiàn)。題目采用以拋物線去逼近三次方程,找出最小值,由于計算xk比較繁瑣,同時又要多次計算,于是將其封裝于一個類中,如下:public class GetParabolaData private static double x1 , x2 , x3 ; /定義三個變量 private static double x_k ; /定義二次函數(shù)極小值點 public static double Funtion2(double x)/函數(shù)返回值 return 8 * x * x * x - 2 * x * x - 7 * x + 3 ; public GetParabolaData(double x1, double x2, double x3) /構(gòu)造函數(shù) this.x1 = x1; this.x2 = x2; this.x3 = x3; public static double getB1() /獲得B1 return (x2 * x2 - x3 * x3) * Funtion2(x1) ; public static double getB2()/獲得B2 return (x3 * x3 - x1 * x1) * Funtion2(x2) ; public static double getB3()/獲得B3 return (x1 * x1 - x2 * x2) * Funtion2(x3) ; public static double getC1()/獲得C1 return (x2 - x3) * Funtion2(x1) ; public static double getC2()/獲得C2 return (x3 - x1) * Funtion2(x2) ; public static double getC3()/獲得C3 return (x1 - x2) * Funtion2(x3) ; public static double getX_k() /獲得函數(shù)極小值 x_k = (getB1() + getB2() + getB3() / (2 * (getC1() + getC2() + getC3() ; return x_k; 如此一來,每次循環(huán)的時候只要通過3個變量實例化class GetParabolaData的對象即可,其遞歸方法如下:public static double Parabola_Optimal(double x1, double x2, double x3) paraboladata = new GetParabolaData(x1,x2,x3) ; /實例化,執(zhí)行全部計算 double x_k = paraboladata.getX_k() ; /獲得拋物線極小值點 /判斷是否遞歸結(jié)束 if(Math.abs(GetParabolaData.Funtion2(x_k) - GetParabolaData.Funtion2(x2)L) return x_k ; else /遞歸繼續(xù) if(x2GetParabolaData.Funtion2(x2) x3 = x_k ; / x1 x2 x_k else / x2 x_k x3 x1 = x2 ; x2 = x_k ; else / x1 x_k x2 x3 if(GetParabolaData.Funtion2(x_k)GetParabolaData.Funtion2(x2) x1 = x_k ; / x_k x2 x3 else / x1 x_k x2 x3 = x2 ; x2 = x_k ; return Parabola_Optimal(x1,x2,x3) ; 之后再配上主方法有: public static void main(String args)System.out.println(Parabola_Optimal(0f, 1f,2f); 顯示為:項目二 常用無約束最優(yōu)化方法(一)實驗目的編寫最速下降法、Newton法(修正Newton法)的程序。編程解決以下問題:1用最速下降法求2用Newton法求,初始點問題1.同樣采用java語言編寫,也包括一個屬于該問題的工具類與一個在主類里執(zhí)行的方法,工具類如下:/* * 最速下降法 */public class Adapter1 private double x1,x2; public Adapter1(double x1, double x2) this.x1 = x1;this.x2 = x2; public double Fution() return x1 * x1 + 25 * x2 *x2 ; public double derivativeFoution() double a = new double2 ; a0 = 2*x1 ; a1 = 50 * x2 ; return a ; public double derivativeFoution_D()return derivativeFoution() ;public boolean isCommuntinue(double e)double d = derivativeFoution_D()0 * derivativeFoution_D()0+ derivativeFoution_D()1 * derivativeFoution_D()1;return d (e * e); /truepublic double vual_y()return -(2 * x1 * derivativeFoution_D()0 + 50 * x2* derivativeFoution_D()1)/ (2 * derivativeFoution_D()0 + 50 * derivativeFoution_D()1);主類里調(diào)用該工具類的方法如下:/* * 最速下降法 */public double Lower(double x1 ,double x2)adapter1 = new Adapter1(x1, x2) ;double a = x1,x2 ;if(adapter1.isCommuntinue(E)/E=0.01double b = x1 + adapter1.vual_y() * adapter1.derivativeFoution_D()0,x2 + adapter1.vual_y() * adapter1.derivativeFoution_D()1 ;return Lower(b0,b1) ;elsereturn a ;結(jié)果顯示如下:問題2,同樣采用java語言編寫,也包括一個屬于該問題的工具類與一個在主類里執(zhí)行的方法,工具類如下:/* * 牛頓 */public class Adapter2 private double x1,x2 ;public Adapter2(double x1, double x2) this.x1 = x1;this.x2 = x2;/* * 一階梯度 */public double fDerivativeFoution() double a = new double2 ; a0 = 2* x1 - x2 - 10 ; a1 = 2 * x2 - x1 - 4 ; return a ; /* * 二階梯度 */public double tDerivativeFoution() double a =2,-1,-1,2 ; return a ; /* * 二階梯度的逆 * 一階梯度 */public double vual_Y()double a = new double2 ;a0 = (2 * fDerivativeFoution()0 + fDerivativeFoution()1) /3 ;a1 = (2 * fDerivativeFoution()1 + fDerivativeFoution()0) /3 ;return a ;public boolean isComtinue(double e)return (vual_Y()1 * vual_Y()1 + vual_Y()0 * vual_Y()0) (e * e);調(diào)用方法如下: /* * 牛頓法 */public static double Newton1(double x1 ,double x2)double a = new double2 ;adapter2 = new Adapter2(x1, x2) ;if(adapter2.isComtinue(E)a0 = x1 - adapter2.vual_Y()0 ;a1 = x2 - adapter2.vual_Y()1 ;return Newton1(a0 ,a1) ;elsea0 = x1 ;a1 = x2 ;return a;顯示結(jié)果如下:項目三 常用無約束最優(yōu)化方法(二)實驗目的編寫共軛梯度法、變尺度法(DFP法和BFGS法)程序。編程解決以下問題:1用共軛梯度法求得,取初始點,2用共軛梯度法求,自定初始點,3用DFP法求,初始點問題1,實現(xiàn)共軛梯度法的工具類如下:/* * 共軛 */public class Adapter4 private double x1,x2,y1,y2 ; private boolean val = false ;public Adapter4(double x1, double x2) public double getD(double e,double x)double a = - getG(x)0 + getP(e,x) * e0,- getG(x)1 + getP(e,x) * e1 ;return a;public double setNextG(double k1,double k2)double a = 2 * k1,4 * k2 ;return a ;/* * 獲取g */public double getG(double x)double a = 2 * x0,4 * x1 ;return a ;/* * 計算 */public double getP(double e,doublex)return (getG(x)0 * getG(x)0 + getG(x)1 * getG(x)1)/(e0 * e0 + e1 * e1) ;/* * A */public double getA()double a = 2,0,0,8 ;return a;public double vaul_Y(double e)return (e0 * e0 + e1 * e1 )/(2 *e0 * e0 + 8 * e1 * e1);public boolean isComtinue(double e,double r)return (r0 * r0 + r1 * r1) (e * e) ;調(diào)用方法如下:/* * 共軛 */public static double GongE(double x,double e)adapter4 = new Adapter4(x0, x1) ;if(adapter4.isComtinue(E,e)double a = new double2 ;double d = new double2 ;a0 = x0 + adapter4.vaul_Y(e) * e0 ;a1 = x1 + adapter4.vaul_Y(e) * e1 ;d = adapter4.getD(e,a) ;return GongE(a , d) ;elsereturn x;結(jié)果顯示如下:問題2,同問題1,計算得結(jié)果如下:X1 = 0 ,x 2 = 0 ;問題3:DFP法,其工具類如下:/* * DPF * author 風飄絮 * */public class Adapter5 private double x1, x2;private double h;public Adapter5(double x1, double x2, double h) this.x1 = x1;this.x2 = x2;this.h = h; /* * 獲得G1 */private double getG() double a = 8 * x1 - 40, 2 * x2 - 12 ;return a;/* *計算D */public double getD() double a = - h0 * getG()0 - h1 * getG()1,-h2 * getG()0 - h3 * getG()1 ;return a;/* * 計算r */public double values() return (40 * getD()0 + 12 * getD()1 - 8 * getD()0 * x1 - 2* getD()1 * x2)/ (8 * getD()0 * getD()0 + 2 * getD()1 * getD()1);/* * 計算G2,進而計算H2 */private double getG2(double x) double a = 8 * x0 - 40, 2 * x1 - 12 ;return a;/* *獲得P */private double getP() double a = values() * getD()0, values() * getD()1 ;return a;/* * 計算Q,需要下一個x值 */private double getQ(double x) double a = getG2(x)0 - getG()0, getG2(x)1 - getG()1 ;return a;/* * H2 = w -M/T M=V*H1 */private double getw(double x) double a = h0+ (getP()0 * getP()0) / (getP()0 * getQ(x)0 + getP()1* getQ(x)1),h1+ (getP()0 * getP()1) / (getP()0 * getQ(x)0 + getP()1* getQ(x)1),h2+ (getP()1 * getP()0) / (getP()0 * getQ(x)0 + getP()1* getQ(x)1),h3+ (getP()1 * getP()1) / (getP()0 * getQ(x)0 + getP()1* getQ(x)1) ;return a;/* * 計算V */private double getV(double x)double a = getQ(x)0 * getQ(x)0 * h0 + getQ(x)0 * getQ(x)1 * h1 , getQ(x)0 * getQ(x)1 * h0 + getQ(x)1 * getQ(x)1 * h1 , getQ(x)0 * getQ(x)1 * h3 + getQ(x)0 * getQ(x)0 * h2, getQ(x)1 * getQ(x)0 * h2 + getQ(x)1 * getQ(x)1 * h3 ;return a;/* * 計算T */private double getT(double x)return getQ(x)0 * getQ(x)0 * h0 + getQ(x)0 * getQ(x)1 * h2 + getQ(x)0 * getQ(x)1 * h1 +getQ(x)1 * getQ(x)1 * h3 ;/* * 計算M */private double getM(double x)double a = getV(x)0 * h0 + getV(x)1 * h2, getV(x)0 * h1 + getV(x)1 * h3, getV(x)2 * h0 + getV(x)3 * h2, getV(x)2 * h1 + getV(x)3 * h3, ;return a;/* * 計算H */public double getH2(double x)double a = getw(x)0 - getM(x)0/getT(x), getw(x)1 - getM(x)1/getT(x), getw(x)2 - getM(x)2/getT(x), getw(x)3 - getM(x)3/getT(x) ;return a;/* * 判斷條件 */public boolean isComtinue(double e)return (getG()0 * getG()0 + getG()1 * getG()1) (e * e) ;調(diào)用方法如下:/* * DFP */private static double DFP(double x1, double x2, double h)double a = x1,x2 ;adapter5 = new Adapter5(x1, x2, h) ;if(adapter5.isComtinue(E)a0 = x1 + adapter5.values() * adapter5.getD()0 ;a1 = x2 + adapter5.values() * adapter5.getD()1 ;double H = adapter5.getH2(a) ;return DFP(a0, a1, H) ;elsereturn a;結(jié)果顯示如下:項目四 常用約束最優(yōu)化方法實驗目的編寫外點罰函數(shù)法、外點罰函數(shù)法的程序。編程解決以下問題:1用外點罰函數(shù)法編程計算精度 2用內(nèi)點罰函數(shù)法編程計算初始點取為,初始障礙因子取,縮小系數(shù)取問題1,鑒于ln x 編程求解比較麻煩,需要用泰勒展開式去必進球近似解,一旦求解,便會使目的變更,將會大邊幅地計算ln x ,所以將兩年ln x 變化為等價的x2 -1=0,進行求解,同樣,工具類如下:/* * 外罰 * author 風飄絮 * */public class Adapter6 private double x1,x2 ; public Adapter6(double x1,double x2) this.x1 = x1 ; this.x2 = x2 ; public double FuntionP(double e) double a = (x1 + x2 - 1) * (x1 + x2 - 1) + (x2-1)* (x2-1); System.out.println(a); return e*a; public void printFuntion() System.out.println(x1=+ x1 + ,x2= + x2); System.out.println(函數(shù)最小值 = + (x2 - x1); public Boolean ifComuntinue(double E,double
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度高端別墅室內(nèi)裝飾設(shè)計與施工合同
- 體育產(chǎn)業(yè)智慧場館建設(shè)與賽事運營支持方案
- 《國際政治格局演變歷程:高中政治教學教案》
- 乘用車行業(yè)智能化生產(chǎn)與銷售方案
- 經(jīng)典科學故事讀后感
- 車輛銷售服務合同附加條款
- 防盜門銷售合同協(xié)議書
- 服裝公司服裝買賣協(xié)議
- 健康產(chǎn)業(yè)產(chǎn)品推廣與營銷策略
- 裝修增項補充合同協(xié)議
- 2025年湖南省高職單招《職業(yè)技能測試》核心考點試題庫500題(重點)
- 2025年無錫科技職業(yè)學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 《復式條形統(tǒng)計圖》(說課稿)-2023-2024學年四年級下冊數(shù)學人教版
- 微量注射泵培訓
- 2025年紹興市上虞大眾勞動事務代理(所)有限公司招聘筆試參考題庫附帶答案詳解
- 酒店會議接待服務方案
- 2025年人教版新教材英語小學三年級下冊教學計劃(含進度表)
- 2025年山東商務職業(yè)學院高職單招高職單招英語2016-2024年參考題庫含答案解析
- 人工智能在企業(yè)人力資源招聘中的運用研究
- 2023年2024年演出經(jīng)紀人之演出經(jīng)紀實務考試題庫附答案(達標題)
- DG-T 076-2024 采茶機標準規(guī)范
評論
0/150
提交評論