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) 避免使用全局变量。