前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >人海战术简单模拟

人海战术简单模拟

作者头像
万木逢春
发布2019-08-16 11:41:48
2950
发布2019-08-16 11:41:48
举报
文章被收录于专栏:帮你学MatLab帮你学MatLab

“凡用兵之法:十则围之,五则攻之,倍则分之;敌则能战之,少则能逃之,不若则能避之。” ——《孙子兵法·谋攻篇》

从模拟效果可以看出增加数量、提升战斗力都是减小损失的可行方案

但是

一百个段子里那种富商绑在一起也怼不过马克吐温这类人

还有可能出现一百个互相怼起来的悲剧

双方数量一致、战斗力一致的情况

绿方数量多于红方、双方战斗力一致的情况

双方数量一致、绿方战斗力优于红方的情况

绿方数量多于红方、绿方战斗力优于红方的情况

修改双方数量、战斗力进行不同情况的模拟

b_num =100;

r_num =100;

b_power =30;

r_power =30;

alim = [100 200];

spacing = [10 10];

maxrectsize = [10 10];

step_size = 3;

step_rate = 0.1;

%%

dx = spacing(1); dy = spacing(2);

[x,y] = meshgrid(dx:dx:alim(1)-1,dy:dy:alim(2)-1);

x = x(:);

y = y(:);

wid = ones(size(x));

hei = ones(size(y));

b_wid=wid;

b_hei=hei;

for b_i=1:1:b_num

index=randi(size(x,1));

b_wid(index)=b_wid(index)+step_size;

b_hei(index)=b_hei(index)+step_size;

end

r_wid=wid;

r_hei=hei;

for r_i=1:1:r_num

index=randi(size(x,1));

r_wid(index)=r_wid(index)+step_size;

r_hei(index)=r_hei(index)+step_size;

end

b_cost = r_power*step_rate;

r_cost = b_power*step_rate;

color=[repmat([0,1,0],size(wid,1),1);repmat([1,0,0],size(wid,1),1)];

%%

while any(b_wid>1) && any(r_wid>1)

for b_i=1:1:b_cost

temp=b_wid;

[~,index_arr]=sort(temp,'descend');

temp(temp<=1)=[];

if isempty(temp)

temp=1;

end

index=index_arr(randi(size(temp,1)));

b_wid(index)=b_wid(index)-step_size;

b_hei(index)=b_hei(index)-step_size;

end

b_wid(b_wid<=0)=1;

b_hei(b_hei<=0)=1;

b_pos = [x-b_wid/2,y-b_hei/2,b_wid,b_hei];

for r_i=1:1:r_cost

temp=r_wid;

[~,index_arr]=sort(temp,'descend');

temp(temp<=1)=[];

if isempty(temp)

temp=1;

end

index=index_arr(randi(size(temp,1)));

r_wid(index)=r_wid(index)-step_size;

r_hei(index)=r_hei(index)-step_size;

end

r_wid(r_wid<=0)=1;

r_hei(r_hei<=0)=1;

r_pos = [x-r_wid/2+100,y-r_hei/2,r_wid,r_hei];

b_num=b_num-b_cost;

r_num=r_num-r_cost;

pause(0.5)

axes; set(gca,'XTick',[],'YTick',[],'Box','on','XLim',[0 alim(1)*2],'YLim',[0 alim(2)]);

axis equal;

rectangles([b_pos;r_pos],'FaceColor',color,'EdgeColor','none');

end

绘图rectangles函数借助

https://ww2.mathworks.cn/matlabcentral/fileexchange/59243-rectangles

相关文件下载

链接:https://pan.baidu.com/s/15FT-H3lJ_kEXHgrhJoOhVA

提取码:ydst

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 帮你学MatLab 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档