動(dòng)態(tài)規(guī)劃求解背包問題 用動(dòng)態(tài)規(guī)劃求解非線性規(guī)劃問題?
用動(dòng)態(tài)規(guī)劃求解非線性規(guī)劃問題?到目前為止,商業(yè)軟件在解決非線性問題上有一些局限性。例如,CPLEX只能用于求解二次規(guī)劃(QP)、帶二次凸約束的二次規(guī)劃(QCQP)、二階錐規(guī)劃(SOCP)以及相應(yīng)的混合
用動(dòng)態(tài)規(guī)劃求解非線性規(guī)劃問題?
到目前為止,商業(yè)軟件在解決非線性問題上有一些局限性。例如,CPLEX只能用于求解二次規(guī)劃(QP)、帶二次凸約束的二次規(guī)劃(QCQP)、二階錐規(guī)劃(SOCP)以及相應(yīng)的混合整數(shù)問題。沒有辦法解決其他非線性問題。當(dāng)然,MOSEK也可以解半定規(guī)劃,也就是說,非線性規(guī)劃的商業(yè)軟件解有很大的局限性。當(dāng)然,也有一些通用軟件,如bonmin for free和knitro for payment,也可以用來求解大規(guī)模非線性規(guī)劃問題,但結(jié)果一般都是局部解。一些聲稱能得到全局非線性解的解算器只能用于解決小規(guī)模問題,而大規(guī)模問題則無法解決。這取決于你的個(gè)人選擇。此外,本文還介紹了yalmip,它是MATLAB與求解器之間的一個(gè)很好的橋梁。這樣,您的建模效率將大大提高。祝你好運(yùn)
memo方法是一種變形的動(dòng)態(tài)規(guī)劃方法。與動(dòng)態(tài)規(guī)劃算法不同,memo方法的遞推方式是自頂向下的,而動(dòng)態(tài)規(guī)劃算法是自下而上的。例如:LCS問題:當(dāng)席= YJ,C[I,J]只需要知道C[I-1,J-1 ],而不是C[I,0 ]~C[I,J-1 ]和C[I-1,J]~C[I-1,N]。當(dāng)只需要一個(gè)LCS時(shí),一些C[P,q]可能不會(huì)在整個(gè)溶液過程中使用。一般情況下,當(dāng)一個(gè)問題可以用動(dòng)態(tài)規(guī)劃來求解時(shí),二維數(shù)組中相當(dāng)數(shù)量的元素不會(huì)用到整個(gè)計(jì)算中。我們不需要遞歸地逐個(gè)計(jì)算二維數(shù)組中的元素。使用memo方法:數(shù)組中的元素只在需要計(jì)算時(shí)才計(jì)算,并且計(jì)算是遞歸的。計(jì)算完這些值后,將保存這些值以用于其他目的。例如:LCs的問題:首先,將C[I,0](0≤I≤m)和C[0,J](1≤J≤n)初始化為0。其余的m×nc[I,J]都初始化為-1。計(jì)算C[I,J]L2(x,y,I,J,C)的遞歸算法LCS(memo方法):如果x[I]=y[J],檢查C[I-1,J-1],如果C[I-1,J-1]>-1(計(jì)算),將C[I-1,J-1]1賦值給C[I,J],并返回。如果C[I-1,J-1]=-1(尚未計(jì)算),則遞歸調(diào)用LCS L2(x,y,I-1,J-1,C)計(jì)算C[I-1,J-1],然后將C[I-1,J-1]1賦給C[I,J],并返回。如果x[i]1,y[J],檢查C[i-1,J]和C[i,J-1]。如果兩者都大于-1(已計(jì)算),則將Max{C[I-1,J],C[I,J-1]}賦給C[I,J],并返回。如果C[I-1,J],C[I,J-1]中的一個(gè)等于-1(尚未計(jì)算),或者兩者都等于-1,則遞歸調(diào)用LCS,L2計(jì)算它,然后將Max{C[I-1,J],C[I,J-1]}賦值給C[I,J]。如果大量的子問題不需要解決,memo方法可以節(jié)省時(shí)間。但是當(dāng)只需要計(jì)算少數(shù)或全部子問題時(shí),遞歸方法比memo方法(如矩陣乘法、最優(yōu)二叉搜索樹)要好