【发布时间】:2018-07-09 15:48:36
【问题描述】:
我想在 MATLAB 中模拟一些圆柱形灯,并尝试在不平坦的表面上使它们的强度均匀化。
为了让问题更简单,我假设每盏灯的长度为 100 厘米,表面是平坦的(100 x 25 厘米)。
在使问题再次变得更简单的第一步中,我尝试只模拟一个灯以最小化表面某些点上的强度变化。为此,我编写了一个 Fitness 函数,它实际上是强度公式:
- r = 你想在那里找到强度的点的距离(以米为单位)
- l = 我放 1 (m) 的表面宽度
- P = 我要使用 15W 的每盏灯的输出功率
还有适应度函数代码是:
function [ intensity ] = simple_fitness(x)
global Pout; % Pout = 15 Watts
r = (( x(1)^2 + x(2)^2 )^(1/2))*((10)^(-2));
intensity = (( Pout / (6 * r) )*( x(2)/r ));
end
约束也是必要的。正如我所说,目标是最小化某些点上的强度变化,我这里有一些未知问题。
约束功能代码为:
function [c, ceq] = simple_constraints(x)
global Pout; %Pout
intensity = zeros(1,26);
avgint = 0;
minus = 0;
for i=0:25
r = (( (x(1)-i)^2 + x(2)^2 )^(1/2))*((10)^(-2));
intensity(i) = (( Pout / (6 * r) )*( x(2)/r ));
end
avgint = mean(intensity);
for j=1:25
minus = minus + ( intensity(i) - avgint )^(2);
end
c = -(sqrt(minus)/avgint) + 0.12 ; %actually it's not the variance formula
ceq = [];
end
一些提示:x(1) 和 x(2) 是灯在空间中的位置:垂直轴 = x(2) 水平轴 = x(1)
在第 6 行,我放置了一个从 0 到 25 的循环。这条线显示了我想在那里计算强度的点。在第 7 行,我编写了代码来获得距离(这只是高中几何:))
我说我想最小化方差,但在这里我制定了一个新公式来实现我的目标,它与方差公式有点不同。在方差公式中,我们应该将每个元素与其平均值的平方偏差除以元素的数量,但在这里我再次将它们除以平均值(它们出纸的原因有一些:/)
最后主要功能代码是:
objectiveFunction = @simple_fitness;
nvars = 2;
global Pout;
Pout = 15;
UB = [25 40]; %% 0<x<25 (cm) / 20<y<40 (cm) lamp
LB = [0 20];
constraintFuntion = @simple_constraints;
rng default
[x ,fval] = ga(objectiveFunction, nvars,[],[],[],[],LB, UB, constraintFuntion)
然后我得到了这些错误:
到底是什么问题???
【问题讨论】:
-
请不要张贴错误信息的图片,而是在此处复制粘贴。
标签: matlab optimization genetic-algorithm