min (100+x1)^2+10*x1+(110+x2)^2+10*x2+(120+x3)^2+10*x3
求解上述最小值问题,可以用fmincon函数来解决。其解决方法为:
第一步,自定义目标函数,即
x1=ceil(k(1))x2=ceil(k(2))x3=0
maxZ=(100+x1)^2+10*x1+(110+x2)^2+10*x2+(120+x2)^2+10*x3
第二步,确定k的初值 ,k0=[0,0]
第三步,使用fmincon函数,即
[k,fval,exitflag] = fmincon(@(k) fmincon_fun(k),k0)
可以得到
x1=1x2=1(库存量)
fval=37183(最小总费用)
以前搞建模在网上下到的代码,不是自己编的,但经过试验可以用,分享了:function len=dijkstra(Input)
%最短路Dijkstra算法,同时给出路径,input为图矩阵
row=size(Input,1)
%赋初值
% s_path=1
distance=inf*ones(1,row)
distance(1)=0
% flag(1)=1
temp=1
%求起点到各点的最短路的权
% s_path=ones(1,3)
while length(s_path)<row
pos=find(Input(temp, : )~=inf)
n=length(pos)
flag=ones(1,n)
for i=1:n
if (isempty(find(s_path==pos(i),1)))&&(distance(pos(i))>...
(distance(temp)+Input(temp,pos(i))))
distance(pos(i))=distance(temp)+Input(temp,pos(i))
flag(pos(i))=temp
end
end
k=inf
for i=1:row
if (isempty(find(s_path==i,1)))&&(k>distance(i))
k=distance(i)
temp_2=i
end
end
s_path=[s_path,temp_2]
temp=temp_2
end
%用追溯法得到起点到各点的最短路的路线
len=zeros(1,row)
for endpoint=1:row
path=0 %初始化
path(1)=endpoint
i=1
while path(i)~=1
path(i+1)=flag(path(i))
i=i+1
end
path(i)=1
path=path(end:-1:1)%最短路径
short_distance=distance(endpoint) %最短路径权
len(endpoint)=short_distance %起点到各点的最短距离
pathall=path %总路径矩阵
end
len=len(25:end)
%{
disp('起点到各点的最短路径:')
celldisp(pathall)
%设法只画出最短路径
em=find(w==inf)
w(em)=0
h = view(biograph(w,[],'ShowWeights','on'))
%}
邮箱给你发了个资料,多年前搞的,估计是忘了,也许这个函数有点问题,你按资料里的做吧
max Z=4x1+5x2 +6x3s.t. 3x1+4x2+5x3<=10
x1,x2,x3>=0且都为整数
约束条件分析:
x1=1,2,3
x2=1,2
x3=1,2
阶段变量:x1、x2、x3
状态变量:
决策变量:
目标函数:Z=4x1+5x2 +6x3
状态转移方程:
约束条件用惩罚处理
……未完待续……
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)