粒子群算法解决TSP问题

时间:2025-04-04 12:52:22
  • private void evolution() {
  • for (int t = 0; t < MAX_GEN; t++) {
  • for (int k = 0; k < scale; k++) {
  • ArrayList<SO> vii = new ArrayList<>();
  • //第一部分:惯性保持部分,自身交换对
  • int len = (int) (w * listV.get(k).size());
  • for (int i = 0; i < len; i++) {
  • vii.add(listV.get(k).get(i));
  • }
  • //第二部分:自我认知部分,和当前粒子中出现最好的结果比较,得出交换序列
  • //ra(Pid-Xid)
  • ArrayList<SO> a = minus(mUnits.get(k).getPath(), Pd.get(k).getPath());
  • float ra = random.nextFloat();
  • len = (int) (ra * a.size());
  • for (int i = 0; i < len; i++) {
  • vii.add(a.get(i));
  • }
  • //第三部分:社会认知部分,和全局最优的结果比较,得出交换序列
  • //rb(Pgd-Xid)
  • ArrayList<SO> b = minus(mUnits.get(k).getPath(), ());
  • float rb = random.nextFloat();
  • len = (int) (rb * b.size());
  • for (int i = 0; i < len; i++) {
  • vii.add(b.get(i));
  • }
  • (0);
  • listV.add(vii);
  • //执行交换,生成下一个粒子
  • exchange(mUnits.get(k).getPath(), vii);
  • }
  • //更新适应度的值
  • for (int i = 0; i < scale; i++) {
  • mUnits.get(i).upDateFitness();
  • if (Pd.get(i).getFitness() > mUnits.get(i).getFitness()) {
  • (i, mUnits.get(i));
  • }
  • if (() > Pd.get(i).getFitness()) {
  • Pgd = Pd.get(i);
  • bestT = t;
  • }
  • }
  • }
  • }