发布网友
共2个回答
热心网友
用matrix dist储存每个点之间的距离,也就是说(dist)ij 是点i 和 j之间的距离。
N = size(dist,1);
seq = 1:1:N;
perm = perms(seq);
size_perm = size(perm,1);
min_dist = inf;
for i =1:1:size_perm
total_dist = 0;
for j = 1:1:N
total_dist = total_dist + dist(j,perm(i,j));
end
if total_dist<min_dist
min_dist = total_dist;
end
end
热心网友
求点倒下线的吗?可以用fmincon
这是个约束问题,假设这个点为(a,b),曲线方程为f(x,y)=0,
这个问题可以转化为
min d^2=(x-a)^2+(y-b)^2
st. f(x,y)=0
你可以调用matlab的最优化函数fmincon
下面是函数介绍
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
fmincon是求解目标fun最小值的内部函数
x0而初值
A b线性不等式约束
Aeq beq线性等式约束
lb下边界
ub上边界
nonlcon非线性约束条件
options其他参数,直接使用默认的即可
比如说 求目标函数f(x,y,z)=-xyz的最小值
有如下约束:
线性不等式:0<x+2y+3z<70
线性等式约束:x+y+z=100
边界约束:x,y,z>0
1.约束书写
对于0<x+2y+3z<70转换为
x+2y+3z<70和-x-2y-3z<0
故
A=[1 2 3;-1 -2 -3];
b=[70;0];
对于x+y+z=100有
Aeq=[1 1 1];
beq=[100];
2.边界的书写
这里只有下边界,故
lb=[0 0 0];
3.目标函数书写
function f=objfun(x_var)
%由于Matlab中可以求解多个变量,但是必须使用数组
%由于有三个变量,故x_var是长度为3的数组
x=x_var(1);
y=x_var(1);
z=x_var(1);
%直接写出目标的表达式
f=-x*y*z;
4.书写调用函数
%根据你的经验和实际,估计变量的大概范围,即初值
%有几个变量就有几个初值
x0=[1 2 3];
x=fmincon(@objfun,x0,A,b,Aeq,beq,lb)
热心网友
用matrix dist储存每个点之间的距离,也就是说(dist)ij 是点i 和 j之间的距离。
N = size(dist,1);
seq = 1:1:N;
perm = perms(seq);
size_perm = size(perm,1);
min_dist = inf;
for i =1:1:size_perm
total_dist = 0;
for j = 1:1:N
total_dist = total_dist + dist(j,perm(i,j));
end
if total_dist<min_dist
min_dist = total_dist;
end
end
热心网友
求点倒下线的吗?可以用fmincon
这是个约束问题,假设这个点为(a,b),曲线方程为f(x,y)=0,
这个问题可以转化为
min d^2=(x-a)^2+(y-b)^2
st. f(x,y)=0
你可以调用matlab的最优化函数fmincon
下面是函数介绍
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
fmincon是求解目标fun最小值的内部函数
x0而初值
A b线性不等式约束
Aeq beq线性等式约束
lb下边界
ub上边界
nonlcon非线性约束条件
options其他参数,直接使用默认的即可
比如说 求目标函数f(x,y,z)=-xyz的最小值
有如下约束:
线性不等式:0<x+2y+3z<70
线性等式约束:x+y+z=100
边界约束:x,y,z>0
1.约束书写
对于0<x+2y+3z<70转换为
x+2y+3z<70和-x-2y-3z<0
故
A=[1 2 3;-1 -2 -3];
b=[70;0];
对于x+y+z=100有
Aeq=[1 1 1];
beq=[100];
2.边界的书写
这里只有下边界,故
lb=[0 0 0];
3.目标函数书写
function f=objfun(x_var)
%由于Matlab中可以求解多个变量,但是必须使用数组
%由于有三个变量,故x_var是长度为3的数组
x=x_var(1);
y=x_var(1);
z=x_var(1);
%直接写出目标的表达式
f=-x*y*z;
4.书写调用函数
%根据你的经验和实际,估计变量的大概范围,即初值
%有几个变量就有几个初值
x0=[1 2 3];
x=fmincon(@objfun,x0,A,b,Aeq,beq,lb)
热心网友
用matrix dist储存每个点之间的距离,也就是说(dist)ij 是点i 和 j之间的距离。
N = size(dist,1);
seq = 1:1:N;
perm = perms(seq);
size_perm = size(perm,1);
min_dist = inf;
for i =1:1:size_perm
total_dist = 0;
for j = 1:1:N
total_dist = total_dist + dist(j,perm(i,j));
end
if total_dist<min_dist
min_dist = total_dist;
end
end
热心网友
求点倒下线的吗?可以用fmincon
这是个约束问题,假设这个点为(a,b),曲线方程为f(x,y)=0,
这个问题可以转化为
min d^2=(x-a)^2+(y-b)^2
st. f(x,y)=0
你可以调用matlab的最优化函数fmincon
下面是函数介绍
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
fmincon是求解目标fun最小值的内部函数
x0而初值
A b线性不等式约束
Aeq beq线性等式约束
lb下边界
ub上边界
nonlcon非线性约束条件
options其他参数,直接使用默认的即可
比如说 求目标函数f(x,y,z)=-xyz的最小值
有如下约束:
线性不等式:0<x+2y+3z<70
线性等式约束:x+y+z=100
边界约束:x,y,z>0
1.约束书写
对于0<x+2y+3z<70转换为
x+2y+3z<70和-x-2y-3z<0
故
A=[1 2 3;-1 -2 -3];
b=[70;0];
对于x+y+z=100有
Aeq=[1 1 1];
beq=[100];
2.边界的书写
这里只有下边界,故
lb=[0 0 0];
3.目标函数书写
function f=objfun(x_var)
%由于Matlab中可以求解多个变量,但是必须使用数组
%由于有三个变量,故x_var是长度为3的数组
x=x_var(1);
y=x_var(1);
z=x_var(1);
%直接写出目标的表达式
f=-x*y*z;
4.书写调用函数
%根据你的经验和实际,估计变量的大概范围,即初值
%有几个变量就有几个初值
x0=[1 2 3];
x=fmincon(@objfun,x0,A,b,Aeq,beq,lb)
热心网友
用matrix dist储存每个点之间的距离,也就是说(dist)ij 是点i 和 j之间的距离。
N = size(dist,1);
seq = 1:1:N;
perm = perms(seq);
size_perm = size(perm,1);
min_dist = inf;
for i =1:1:size_perm
total_dist = 0;
for j = 1:1:N
total_dist = total_dist + dist(j,perm(i,j));
end
if total_dist<min_dist
min_dist = total_dist;
end
end
热心网友
求点倒下线的吗?可以用fmincon
这是个约束问题,假设这个点为(a,b),曲线方程为f(x,y)=0,
这个问题可以转化为
min d^2=(x-a)^2+(y-b)^2
st. f(x,y)=0
你可以调用matlab的最优化函数fmincon
下面是函数介绍
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
fmincon是求解目标fun最小值的内部函数
x0而初值
A b线性不等式约束
Aeq beq线性等式约束
lb下边界
ub上边界
nonlcon非线性约束条件
options其他参数,直接使用默认的即可
比如说 求目标函数f(x,y,z)=-xyz的最小值
有如下约束:
线性不等式:0<x+2y+3z<70
线性等式约束:x+y+z=100
边界约束:x,y,z>0
1.约束书写
对于0<x+2y+3z<70转换为
x+2y+3z<70和-x-2y-3z<0
故
A=[1 2 3;-1 -2 -3];
b=[70;0];
对于x+y+z=100有
Aeq=[1 1 1];
beq=[100];
2.边界的书写
这里只有下边界,故
lb=[0 0 0];
3.目标函数书写
function f=objfun(x_var)
%由于Matlab中可以求解多个变量,但是必须使用数组
%由于有三个变量,故x_var是长度为3的数组
x=x_var(1);
y=x_var(1);
z=x_var(1);
%直接写出目标的表达式
f=-x*y*z;
4.书写调用函数
%根据你的经验和实际,估计变量的大概范围,即初值
%有几个变量就有几个初值
x0=[1 2 3];
x=fmincon(@objfun,x0,A,b,Aeq,beq,lb)
热心网友
用matrix dist储存每个点之间的距离,也就是说(dist)ij 是点i 和 j之间的距离。
N = size(dist,1);
seq = 1:1:N;
perm = perms(seq);
size_perm = size(perm,1);
min_dist = inf;
for i =1:1:size_perm
total_dist = 0;
for j = 1:1:N
total_dist = total_dist + dist(j,perm(i,j));
end
if total_dist<min_dist
min_dist = total_dist;
end
end
热心网友
求点倒下线的吗?可以用fmincon
这是个约束问题,假设这个点为(a,b),曲线方程为f(x,y)=0,
这个问题可以转化为
min d^2=(x-a)^2+(y-b)^2
st. f(x,y)=0
你可以调用matlab的最优化函数fmincon
下面是函数介绍
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
fmincon是求解目标fun最小值的内部函数
x0而初值
A b线性不等式约束
Aeq beq线性等式约束
lb下边界
ub上边界
nonlcon非线性约束条件
options其他参数,直接使用默认的即可
比如说 求目标函数f(x,y,z)=-xyz的最小值
有如下约束:
线性不等式:0<x+2y+3z<70
线性等式约束:x+y+z=100
边界约束:x,y,z>0
1.约束书写
对于0<x+2y+3z<70转换为
x+2y+3z<70和-x-2y-3z<0
故
A=[1 2 3;-1 -2 -3];
b=[70;0];
对于x+y+z=100有
Aeq=[1 1 1];
beq=[100];
2.边界的书写
这里只有下边界,故
lb=[0 0 0];
3.目标函数书写
function f=objfun(x_var)
%由于Matlab中可以求解多个变量,但是必须使用数组
%由于有三个变量,故x_var是长度为3的数组
x=x_var(1);
y=x_var(1);
z=x_var(1);
%直接写出目标的表达式
f=-x*y*z;
4.书写调用函数
%根据你的经验和实际,估计变量的大概范围,即初值
%有几个变量就有几个初值
x0=[1 2 3];
x=fmincon(@objfun,x0,A,b,Aeq,beq,lb)