**Input:**Combat scenario parameters, including *M*, *N*, , , and . |

The first three best solutions in the *t*th iteration, , and . |

The control parameter *a*. |

**Output:**The assignment scheme of in the (*t*+1)th iteration, |

**Procedures:**Generate a random number between (0,1), denoted by *rand* |

**if** *rand* ≤ *a* // the roulette wheel selection method |

Calculate the fitness value of , and , denoted by , and in turn; |

Calculate , (); |

Set *cum*=0. |

Generate a random number between (0,1), denoted by *r*_{0} |

**for** *l*=*α*, *β*, *δ* |

*cum*=* cum* + |

**if** *r*_{0} ≤ *cum* |

; |

**break** |

**endif** |

**endfor** |

**else **// the reassignment method |

Set *q_max*= ; |

**for** *j*=1→*N* |

**if** *q_max*<=0 // determine if all weapons of have been assigned |

**break** // terminates the execution of the for loop, i.e. **for** *j*=1→*N* |

**endif** |

**if E**(*i*, *j*))==1 // can attack |

Generate a random integer, denoted by *n_rand*, between 1 and *q_max*; |

Assign *n_rand* weapons to ; |

Update *q_max*=* q_max*-*n_rand*; |

**endif** |

**endfor** |

**endif** |