# 微分可能 TSP ソルバー (巡回セールスマン問題)

この例は、Tensor Logic における微分可能プログラミングのアプローチを使用して、巡回セールスマン問題 (TSP) を解く方法を示しています。

## 概念

目標は、各都市をちょうど一度ずつ訪問し、出発地点に戻る最短経路を見つけることです。
`[N, N]` の順列行列 `P` を学習します。ここで `P[i, j]` は、ツアーの `i` 番目のステップで都市 `j` を訪問する確率を表します。

## 実装の詳細

- **ベクトル化された距離計算**: ブロードキャスティングと行列乗算を使用して、全都市間の二乗距離行列を計算します。
- **順列の学習**: 都市の次元に対する `Softmax` を使用して、順列行列を近似します。
- **損失関数**:
    - **ツアーの長さ**: パスの合計二乗距離を最小化します。
    - **パス制約**: 同じ都市を複数回訪問することへのペナルティ (Pの列の合計が1になるようにします)。
- **シフト行列**: 損失計算のために、ツアー内の「次」の位置を計算する巡回シフト行列 `S` を構築します。

## 使用方法

```bash
tl run examples/tasks/tensor_logic/tsp/tsp.tl
```
