⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kerncalc.m

📁 多智能体工具包
💻 M
字号:
function kerncalc(ThisChrom)
% KERNCALC	Calculate the parameters for the selected chromosome.

%     Copyright (c) 1998-2000 Jiming Liu and Jianbing Wu

global RobotNum ObjectPosition GoalPosition AxisDirection;
global RobotHistory ObjectHistory GoalHistory ChromHistory;
global RegionNum DirectionNum StepRatio EdgeLimit WorkArea;
global ObjectSize RotateRatio LastMoveDierction;

ThisCase=getreal(ThisChrom);
ChromHistory=[ChromHistory;ThisCase];

if isempty(RobotHistory)
  for loops=1:RobotNum
    ThisDirection=ThisCase(loops)*2*pi/RegionNum+AxisDirection;
    RobotX=ObjectPosition(1)+ObjectSize*cos(ThisDirection);
    RobotY=ObjectPosition(2)+ObjectSize*sin(ThisDirection);
    RobotHistory=[RobotHistory RobotX RobotY];
  end;
end;

% Join Force & Join Torque
XForce=0;
YForce=0;
JoinTorque=0;
for loop1=1:RobotNum
  [TakeRole,DeltaAngle]=takerole(ThisCase(loop1),ThisCase(loop1+RobotNum));
  if TakeRole
    XForce=XForce+cos(ThisCase(loop1+RobotNum)*2*pi/DirectionNum);
    YForce=YForce+sin(ThisCase(loop1+RobotNum)*2*pi/DirectionNum);

    [ThisTorque,TheSign]=gettorqu(DeltaAngle);
    JoinTorque=JoinTorque+ThisTorque*TheSign;
  end;
end;

RotateAngle=RotateRatio*JoinTorque;

JoinForce=sqrt(XForce*XForce+YForce*YForce);
JoinForceDir=atan2(YForce,XForce);

LastMoveDierction=JoinForceDir;

Step=JoinForce*StepRatio;
MoveDirection=AxisDirection+JoinForceDir;

ObjectX=ObjectPosition(1)+Step*cos(MoveDirection);
ObjectY=ObjectPosition(2)+Step*sin(MoveDirection);
if ObjectX<EdgeLimit
  ObjectX=EdgeLimit;
elseif ObjectX>(WorkArea(1)-EdgeLimit)
  ObjectX=WorkArea(1)-EdgeLimit;
end;
if ObjectY<EdgeLimit
  ObjectY=EdgeLimit;
elseif ObjectY>(WorkArea(2)-EdgeLimit)
  ObjectY=WorkArea(2)-EdgeLimit;
end;

ObjectPosition=[ObjectX ObjectY];
ObjectHistory=[ObjectHistory;ObjectPosition];
GoalHistory=[GoalHistory;GoalPosition];

RobotPosition=[];
for loops=1:RobotNum
  RobotDirection=AxisDirection+ThisCase(loops)*2*pi/RegionNum+RotateAngle;
  RobotX=ObjectPosition(1)+ObjectSize*cos(RobotDirection);
  RobotY=ObjectPosition(2)+ObjectSize*sin(RobotDirection);
  RobotPosition=[RobotPosition RobotX RobotY];
end;
RobotHistory=[RobotHistory;RobotPosition];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -