Compare commits

..

2 Commits

Author SHA1 Message Date
4eb6637062 fix brownian behavior 2022-05-12 20:22:18 +08:00
8670b577f9 Add sample tracking behavior 2022-05-11 13:09:51 +08:00
2 changed files with 18 additions and 6 deletions

View File

@ -132,7 +132,7 @@ class Brownian extends Behavior<IBrownianBehaviorParameter, IBrownianBehaviorEve
const vLen = individual.vectorLength(individual.velocity); const vLen = individual.vectorLength(individual.velocity);
// 随机旋转算法 // 随机旋转算法
if (vLen !== 0) { if (vLen > 0) {
randomDir = this.randomFocusRange( randomDir = this.randomFocusRange(
[ [
individual.velocity[0] / vLen, individual.velocity[0] / vLen,
@ -141,6 +141,10 @@ class Brownian extends Behavior<IBrownianBehaviorParameter, IBrownianBehaviorEve
], ],
this.parameter.angle / 2 this.parameter.angle / 2
); );
if (isNaN(randomDir[0]) || isNaN(randomDir[1]) || isNaN(randomDir[2])) {
randomDir = this.randomFocus360()
}
} }
else { else {
@ -153,10 +157,12 @@ class Brownian extends Behavior<IBrownianBehaviorParameter, IBrownianBehaviorEve
randomDir = this.randomFocus360() randomDir = this.randomFocus360()
} }
const randomLength = minStrength + Math.random() * (maxStrength - minStrength);
individual.applyForce( individual.applyForce(
minStrength + randomDir[0] * (maxStrength - minStrength), randomDir[0] * randomLength,
minStrength + randomDir[1] * (maxStrength - minStrength), randomDir[1] * randomLength,
minStrength + randomDir[2] * (maxStrength - minStrength) randomDir[2] * randomLength
); );
nextTime = minFrequency + Math.random() * (maxFrequency - minFrequency); nextTime = minFrequency + Math.random() * (maxFrequency - minFrequency);

View File

@ -5,6 +5,7 @@ import { Model } from "@Model/Model";
type ISampleTrackingBehaviorParameter = { type ISampleTrackingBehaviorParameter = {
target: "CLG", target: "CLG",
key: "string",
strength: "number", strength: "number",
range: "number", range: "number",
angle: "number", angle: "number",
@ -27,6 +28,7 @@ class SampleTracking extends Behavior<ISampleTrackingBehaviorParameter, ISampleT
public override parameterOption = { public override parameterOption = {
target: { type: "CLG", name: "$Target" }, target: { type: "CLG", name: "$Target" },
key: { type: "string", name: "$Key"},
range: { type: "number", name: "$Range", defaultValue: 4, numberMin: 0, numberStep: .1 }, range: { type: "number", name: "$Range", defaultValue: 4, numberMin: 0, numberStep: .1 },
angle: { type: "number", name: "$Angle", defaultValue: 180, numberMin: 0, numberMax: 360, numberStep: 5 }, angle: { type: "number", name: "$Angle", defaultValue: 180, numberMin: 0, numberMax: 360, numberStep: 5 },
strength: { type: "number", name: "$Strength", defaultValue: 1, numberMin: 0, numberStep: .1 }, strength: { type: "number", name: "$Strength", defaultValue: 1, numberMin: 0, numberStep: .1 },
@ -81,7 +83,7 @@ class SampleTracking extends Behavior<ISampleTrackingBehaviorParameter, ISampleT
dirArr[i][0] += targetDir[0]; dirArr[i][0] += targetDir[0];
dirArr[i][1] += targetDir[1]; dirArr[i][1] += targetDir[1];
dirArr[i][2] += targetDir[2]; dirArr[i][2] += targetDir[2];
valArr[i] += targetIndividual.getData("Wastage.Pheromone") ?? 0; valArr[i] += targetIndividual.getData(this.parameter.key) ?? 0;
isFindNest = true; isFindNest = true;
} }
} }
@ -90,7 +92,7 @@ class SampleTracking extends Behavior<ISampleTrackingBehaviorParameter, ISampleT
// 保存 // 保存
dirArr.push(targetDir); dirArr.push(targetDir);
valArr.push(targetIndividual.getData("Wastage.Pheromone") ?? 0); valArr.push(targetIndividual.getData(this.parameter.key) ?? 0);
} }
} }
}); });
@ -124,6 +126,10 @@ class SampleTracking extends Behavior<ISampleTrackingBehaviorParameter, ISampleT
"ZH_CN": "追踪目标", "ZH_CN": "追踪目标",
"EN_US": "Tracking target" "EN_US": "Tracking target"
}, },
"$Key": {
"ZH_CN": "计算键值",
"EN_US": "Calculate key value"
},
"$Accuracy": { "$Accuracy": {
"ZH_CN": "采样精度", "ZH_CN": "采样精度",
"EN_US": "Sampling accuracy" "EN_US": "Sampling accuracy"