質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

受付中

2opt法で経路順が変わらない

RTG143
RTG143

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0回答

0グッド

0クリップ

94閲覧

投稿2022/11/28 08:08

前提

TSPにおいて2opt法を用いて解きます。
NN法で出力した経路順で2opt法を適応します。

発生している問題・エラーメッセージ

->13->4->3->10->11->2->1->5->7->8->12->9->14->6-> path length= 3.795572 8->7->5->1->2->11->10->3->4->13->0->6->14->9->12-> path length= 3.795572

上の順列がNN法
下が2opt法です。

これをプロットしても同じグラフで,改良されていません。

該当のソースコード

C

void two_opt(int p[], double d[N][N], int n) { int i, j, k, dif, temp; for (i = 1; i < n+1; i++) { for (j = i+2; j <i + n-1 ; j++) { dif = ( d[p[i%n]][p[(i+1)%n]] + d[p[j%n]][p[(j+1)%n]] ) - (d[p[i%n]][p[j%n]] + d[p[(i+1)%n]][p[(j+1)%n]]); if (dif > 0) { for (k = 0; k <(j-i)/2; k++) { temp = p[(i+1+k)%n]; p[(i+1+k)%n] = p[(j-k)%n]; p[(j-k)%n] = temp; } return; } } } } void NN(int p[], double d[N][N], int n){ int min_ind,visited[n]; int i,j; for(i=0; i < n; i++){ visited[i] = 0; //初期化 } int k = 0; for(i=0; i < n; i++){ p[i] = k; // visited[k] = 1; //訪問済み double min = 10000;//十分に大きい値 for(j=0; j < n; j++){ if (visited[j] == 0 && d[k][j] < min) { min = d[k][j]; min_ind = j; } } k = min_ind; } }

http://aok.blue.coocan.jp/joho/sw18apm2.html
こちらのサイトを参考にかいてみました。
2opt法のアルゴリズムも理解しているつもりなのですが,どこが間違っているのか教えていただきたいです。
ノード数を増やしての実行も行いましたが、改良されていなかったです。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

jimbe

2022/11/28 09:33

前の質問はどうなったのでしょうか。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。