Matlab错误的结果与数组计算

时间:2012-07-30 13:50:23

标签: algorithm matlab

我正在尝试从一篇论文中重现结果,我给出了一个链接,以避免写下所需的所有数学:

  

On Modeling and Simulation of Game Theory-based Defense Mechanisms against DoS and DDoS Attacks

更具体地说,我遇到的问题是图3的情节。在给定两个变量m和M的情况下,该图在z轴上给出了等式3的结果。将需要的其他等式是5,6,7并且在等式6之前的段落中还有两个小的等式。看看Xi是什么检查4.2部分。所需的所有变量值都在图表之前给出。

现在要说明一点,我正在尝试在matlab中创建完全相同的情节,但我失败了,我需要帮助,因为我的matlab技能​​不太好。

我有一个脚本文件,其中包含以下内容:

w1  = 1000;
w2  = 1000;
w3  = 10;  
B   = 2000;
n   = 20;  
r_l = 60;  
s_l = 20;  
g   = 10;  
a_f = 5000;
b   = 20;  

vx = 0 : 1 : 500;
vy = 0 : 1 : 90;

[x,y] = meshgrid(vx,vy);

z = payoff(w1, w2, w3, y, r_l, n, g, B, b, x, s_l, a_f);

h = surfc(x,y,z);
set(h, 'edgecolor','none')
xlabel('Firewall Midpoint (M)')
ylabel('Number of zombies')
zlabel('Attackers payoff')
view(-41,11);

支付是一个如下函数:

function out = payoff(w1, w2, w3, m, r_l, n, g, B, b, M, s_l, a_f)

r_a = a_f./ m;
r_a_dash = r_a.*(1-Fx(r_a, b, M, B));
r_l_dash = r_l.*(1-Fx(r_l, b, M, B));

v_b = ( m .* r_a_dash ) ./ ( n .* r_l_dash + m .* r_a_dash );
v_n = normcdf(( g .* ( n .* r_l_dash + m .* r_a_dash ) ./ B ), r_l, s_l);

out = w1 * v_b + w2 * v_n - w3 * m;

Fx再次是一个执行以下操作的函数:

function out = Fx(x,b,M,B)

out=1./(1+exp(-b.*(x-M)./B)); 

我不知道错误的确切位置,但我得到的情节如下,与文章中的情节不同。

本文中的数字沿Firewall Midpoint轴呈U形曲线,而我的单调增加。 My results

有人能发现我的错误吗?提前谢谢。

1 个答案:

答案 0 :(得分:3)

我注意到的一件大事就是你使用的代码:

v_n = normcdf(( g .* ( n .* r_l_dash + m .* r_a_dash ) ./ B ), r_l, s_l);

当你应该使用(我认为)时:

v_n = normcdf(( g .* ( n .* r_l_dash + m .* r_a_dash ) ./ B ), r_l_dash, s_l);

在论文中,他们说:

  

回想一下 r l 表示合法流量的预期利率。让通过防火墙的合法流量的平均速率为 r l '。

normcdf函数中,第二个参数应为平均值mu。这给了我一个沿防火墙中点的U形曲线,但我可以看到它与图片不完全相同,我认为这是由于b的值,正如有人已经说过的那样没有给出。

希望这会有所帮助。可能仍然存在计算错误,因为我已经使用了各种b值并且仍然无法与纸张中的图像匹配。