Skip to content
This repository was archived by the owner on Oct 9, 2022. It is now read-only.

Commit eea26ea

Browse files
committed
Update leading wolves position update
1 parent c1a7cc5 commit eea26ea

File tree

1 file changed

+43
-15
lines changed

1 file changed

+43
-15
lines changed

src/Algo.ts

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,15 @@ export class GWOAlgo extends Algo {
9191
*/
9292
public updateChiefWolves(sol: Solution[]) {
9393

94-
sol = sol.sort((a, b) => {
95-
return b.fitness - a.fitness;
96-
})
94+
if (sol.length && sol[0].problem.maximization) {
95+
sol = sol.sort((a, b) => {
96+
return b.fitness - a.fitness;
97+
})
98+
} else {
99+
sol = sol.sort((a, b) => {
100+
return a.fitness - b.fitness;
101+
});
102+
}
97103

98104
if (!this.alpha || !this.beta || !this.delta) {
99105
this.alpha = sol[0].copy();
@@ -102,19 +108,41 @@ export class GWOAlgo extends Algo {
102108
return;
103109
}
104110

105-
for (let i = 0; i < sol.length; i++) {
106-
if (sol[i].fitness < this.delta.fitness) break;
107-
108-
if (sol[i].fitness > this.alpha?.fitness) {
109-
this.delta = this.beta.copy();
110-
this.beta = this.alpha.copy();
111-
this.alpha = sol[i].copy();
112-
} else if (sol[i].fitness > this.beta?.fitness) {
113-
this.delta = this.beta.copy();
114-
this.beta = sol[i].copy();
115-
} else if (sol[i].fitness > this.delta?.fitness) {
116-
this.delta = sol[i].copy();
111+
if (sol.length && sol[0].problem.maximization) {
112+
113+
for (let i = 0; i < sol.length; i++) {
114+
if (sol[i].fitness < this.delta.fitness) break;
115+
116+
if (sol[i].fitness > this.alpha?.fitness) {
117+
this.delta = this.beta.copy();
118+
this.beta = this.alpha.copy();
119+
this.alpha = sol[i].copy();
120+
} else if (sol[i].fitness > this.beta?.fitness) {
121+
this.delta = this.beta.copy();
122+
this.beta = sol[i].copy();
123+
} else if (sol[i].fitness > this.delta?.fitness) {
124+
this.delta = sol[i].copy();
125+
}
126+
}
127+
128+
} else {
129+
130+
for (let i = 0; i < sol.length; i++) {
131+
if (sol[i].fitness > this.delta.fitness) break;
132+
133+
if (sol[i].fitness < this.alpha?.fitness) {
134+
this.delta = this.beta.copy();
135+
this.beta = this.alpha.copy();
136+
this.alpha = sol[i].copy();
137+
} else if (sol[i].fitness < this.beta?.fitness) {
138+
this.delta = this.beta.copy();
139+
this.beta = sol[i].copy();
140+
} else if (sol[i].fitness < this.delta?.fitness) {
141+
this.delta = sol[i].copy();
142+
}
117143
}
144+
118145
}
146+
119147
}
120148
}

0 commit comments

Comments
 (0)