0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AI Programmerに経路検索させてみる

Posted at

AI Programmerを試してみる

2022/10/4、こんなニュースを見ました。
https://www.itmedia.co.jp/news/articles/2210/04/news134.html

以前からGithub CopilotなどAIでソースを書くサービスは知ってましたが、へぇ〜な感じ(あんまりGithub使ってないので…)でした。
サイトを見たところパッと試せそうだったので、少し遊んでみます。

経路検索するプログラムを作成させてみる

本業の絡みですね。

  1. AI Programmerにアクセス
  2. 言語は「C++」
  3. 処理内容は「出発地点と到着地点を指定したら、与えられたネットワークデータからその2点間のパスをグラフ探索するプログラム」
  4. 「コードを生成」をクリック!

出てきたコードがこちらです。

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<vector<int>> G(n);
    for (int i = 0; i < n; i++) {
        int u, k;
        cin >> u >> k;
        G[u].push_back(k);
    }
    int s, t;
    cin >> s >> t;
    queue<int> que;
    vector<bool> used(n);
    vector<int> prev(n);
    que.push(s);
    used[s] = true;
    while (!que.empty()) {
        int u = que.front();
        que.pop();
        for (int i = 0; i < G[u].size(); i++) {
            int v = G[u][i];
            if (!used[v]) {
                used[v] = true;
                prev[v] = u;
                que.push(v);
            }
        }
    }
    if (used[t]) {
        vector<int> path;
        int cur = t;
        while (cur != s) {
            path.push_back(cur);
            cur = prev[cur];
        }
        path.push_back(s);
        reverse(path.begin(), path.end());
        for (int i = 0; i < path.size(); i++) {
            cout << path[i] << " ";
        }
        cout << endl;
    } else {
        cout << "No path" << endl;
    }
    return 0;
}

ざっと読んだ限りでは与えられたグラフから経路を探索できそうです。

実際に動かしてみる!

下記のネットワークを与えます。

image.png

Linuxでビルドします。
Reverse()はエラーになったので削除。取得したパスを始点からに並び替えるだけでグラフ探索本体には影響しません。

g++ graph.cpp -std=C++0x -o graph
./graph
14 //辺の数を入力
1 //辺1from
2 //辺2to
1
3
2
3
2
4
3
5
4
5
4
7
5
6
5
7
6
7
7
8
7
9
8
10
9 //辺14from
10 //辺14to
1 //始点
8 //終点
8 7 4 2 1 //結果

cinへの入力のガイドがなくわかりづらいので注釈を入れました。
Reverse()を削除しているので終点からの経路表示になっていますが、ちゃんとネットワークを辿った結果が出ています。

多分私がこのレベルのグラフ探索のプログラム(既存の探索ライブラリなし、アルゴリズムからソースに起こす)をゼロから書いたら、30分以上はかかります。
それがものの1分も経たずに出てきました。

思っていた以上にすごかったです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?