A. matlab的優化工具箱,optimization中fminimax的使用
http://..com/question/333697368.html
x = fminimax(fun,x0)給定初值x0, 求函數最小值;
x = fminimax(fun,x0,A,b)給定初值x0,且滿足A x<=b,A是矩陣,b是向量;
x = fminimax(fun,x,A,b,Aeq,beq),滿足A x<=b,滿足線性方程組Aeq*x = beq;Aeq矩陣,beq向量;
x = fminimax(fun,x,A,b,Aeq,beq,lb,ub),用法同上,再滿足 lb<=x<=ub;
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) subjects the minimax problem to the nonlinear inequalities c(x) or equality constraints ceq(x) defined in nonlcon. fminimax optimizes such that c(x) ≤ 0 and ceq(x) = 0. Set lb = [] and/or ub = [] if no bounds exist.
[x,fval] = fminimax(...)返回最小值時x值和函數最小值。
[x,fval,maxfval] = fminimax(...) 返回目標函數最大值;
[x,fval,maxfval,exitflag] = fminimax(...)返回 exitflag描述最小值存在狀態。
希望幫上你。
B. MATLAB優化工具箱--線性規劃問題
這個是整數規劃。
你得用別的函數。
比如:ipslv_mex,這個好像得去網上載。
f=ones(7,1);
A=[1,4,0,0,3,1,2;1,0,3,0,1,2,0;1,0,0,2,0,0,1];
b=[50;30;25];
intlist=zeros(7,1); %代表專7個變屬量都是整數
xmin=ones(7,1); %代表7個變數的最小值均為1
xmax=inf*ones(7,1); %代表7個變數最大值均為無窮大
ctype=ones(3,1); %代表三個方程都是Ax=b,大於等於的話為1,小於等於的話為-1
[x,how]=ipslv_mex(f,A,b,intlist,xmax,xmin,ctype)
結果為:
x =
16
1
1
4
9
1
1
C. Matlab 優化工具箱目標函數寫法
很多條件不明確復:
1、【每次優化制都需要導入不同的A和B】,到底A和B是什麼?
2、【x有個范圍,是整數】,也就是說還有其他約束條件,為什麼不給出來?
3、我很懷疑,這樣的目標函數還算是線性規劃嗎?當然,由於前面說的【x是整數】,已經決定了這是整數規劃問題。
D. 在用matlab的優化工具箱中的linprog求解器或者其他求解器求最優值時,怎麼設置變數約束條件為整數
可以用分支定界法求解整數規劃問題,給你源碼:
function [x,fm] = IntProgFZ(f,A,b,Aeq,beq,lb,ub)
x = NaN;
fm = NaN;
NF_lb = zeros(size(lb));
NF_ub = zeros(size(ub));
NF_lb(:,1) = lb;
NF_ub(:,1) = ub;
F = inf;
while 1
sz = size(NF_lb);
k = sz(2);
opt = optimset('TolX',1e-9);
[xm,fv,exitflag] = linprog(f,A,b,Aeq,beq,NF_lb(:,1),NF_ub(:,1),[],opt);
if exitflag == -2
xm = NaN;
fv = NaN;
end
if xm == NaN
fv = inf;
end
if fv ~= inf
if fv < F
if max(abs(round(xm) - xm))<1.0e-7
F = fv;
x = xm;
tmpNF_lb = NF_lb(:,2:k);
tmpNF_ub = NF_ub(:,2:k);
NF_lb = tmpNF_lb;
NF_ub = tmpNF_ub;
if isempty(NF_lb) == 0
continue;
else
if x ~= NaN
fm = F;
return;
else
disp('不存在最優解!');
x = NaN;
fm = NaN;
return;
end
end
else
lb1 = NF_lb(:,1);
ub1 = NF_ub(:,1);
tmpNF_lb = NF_lb(:,2:k);
tmpNF_ub = NF_ub(:,2:k);
NF_lb = tmpNF_lb;
NF_ub = tmpNF_ub;
[bArr,index] = find(abs((xm - round(xm)))>=1.0e-7);
p = bArr(1);
new_lb = lb1;
new_ub = ub1;
new_lb(p) = max(floor(xm(p)) + 1,lb1(p));
new_ub(p) = min(floor(xm(p)),ub1(p));
NF_lb = [NF_lb new_lb lb1];
NF_ub = [NF_ub ub1 new_ub];
continue;
end
else
tmpNF_lb = NF_lb(:,2:k);
tmpNF_ub = NF_ub(:,2:k);
NF_lb = tmpNF_lb;
NF_ub = tmpNF_ub;
if isempty(NF_lb) == 0
continue;
else
if x ~= NaN
fm = F;
return;
else
disp('不存在最優解!');
x = NaN;
fm = NaN;
return;
end
end
end
else
tmpNF_lb = NF_lb(:,2:k);
tmpNF_ub = NF_ub(:,2:k);
NF_lb = tmpNF_lb;
NF_ub = tmpNF_ub;
if isempty(NF_lb) == 0
continue;
else
if x ~= NaN
fm = F;
return;
else
disp('不存在最優解!');
x = NaN;
fm = NaN;
return;
end
end
end
end
E. matlab工具箱優化問題
這問題,不好意思
路過......拿兩分
F. 怎樣啟動MATLAB優化工具箱
f(x)=x.^4-3*x.^3+x.^2-2;
利用遺傳演算法求解,選擇ga solver(求解器),輸入適應函數,專輸入變數個數,start就可以了,屬充分反應了遺傳演算法的優越性。
接著是對無約束一維極值問題的求解。
首先是進退法搜索單谷函數的極值問題。原理就是在固定區間內按照一定步長無窮逼近最優解,不過無論怎樣逼近,最後得到的還是符合精度的區間,並不是理論最優解。Matlab中用minJT函數來實現。
相關的函數代碼可以在matlab相關文件夾中找到,這里就不多說,不過還是按這種方法求一下上面的極小值問題。
代碼如下:
syms x;
f=x^4-3*x^3+x^2-2;
[x1,x2]=minJT(f,0,0.001);
G. Matlab中的優化工具包都能求解哪些類型的優化問題求解的函數是什麼
工具箱函數
常用函數:
一元函數極小值
X=fminbnd(『F』,x1,x2)
無約束極小值
X=fminunc(『F』,X0)
X=fminsearch(『F』,X0)
線性規劃
X=linprog(c,A,b)
0-1整數規劃
X=bintprog(F)
二次規劃
X=quadprog(H,c,A,b)
約束極小值(非線性規劃)
X=fmincon(『FG』,X0)
非線性最小二乘
X=lsqnonlin(F,X0)
目標達到問題
X=fgoalattain(『F』,x,goal,w)
極小極大問題
X=fminimax(『FG』,x0)
輸入參數中可以用options,用於所有函數,其中包括有一下參數。
(1) Display:結果顯示方式,off不顯示,iter顯示每次迭代的信息,final為最終結果,notify只有當求解不收斂的時候才顯示結果。
(2) MaxFunEvals:允許函數計算的最大次數,取值為正整數。
(3) MaxIter:允許迭代的最大次數,正整數。
(4) TolFun:函數值(計算結果)精度,正整數。
(5) TolX:自變數的精度,正整數。
而且可以用函數optimset創建和修改。
模型輸入時需要注意問題:
(1) 目標函數最小化;
(2) 約束非正;
(3) 避免使用全局變數。