from collections import deque
def stable_pairs(proposers, receivers):
if type(proposers) not in (list, tuple) or type(receivers) not in (list, tuple):
raise ValueError("preference tables must be lists or tuples")
n = len(proposers)
if n > 20 or len(receivers) != n: raise ValueError("equal sizes up to 20")
for rows in (proposers, receivers):
for row in rows:
if type(row) not in (list, tuple) or len(row) != n or any(type(v) is not int for v in row) or set(row) != set(range(n)):
raise ValueError("complete strict preferences")
ranks = [{v:i for i,v in enumerate(row)} for row in receivers]
free, next_choice = deque(range(n)), [0]*n
owner, partner = [None]*n, [None]*n
while free:
p = free.popleft()
r = proposers[p][next_choice[p]]
next_choice[p] += 1
old = owner[r]
if old is None or ranks[r][p] < ranks[r][old]:
owner[r], partner[p] = p, r
if old is not None: partner[old] = None; free.append(old)
else: free.append(p)
return partner- モデル
- OpenAI互換またはAnthropicのエンドポイントを、ベースURLと必要なAPIキーで設定し、接続をテストします。ローカルのモデルサーバーは起動が必要です。リモートツールは別途データを送信する場合があります。
- プロジェクト
- 空の群と競合する選択を試し、重複や欠落した選好を拒否してブロッキングペアがないことを確認します。
- 適用前に確認
- 実際の動作を期待する結果と比較します。検証に失敗した場合は、次の変更を加える前に原因を調べてください。
from collections import deque
def stable_pairs(proposers, receivers):
if type(proposers) not in (list, tuple) or type(receivers) not in (list, tuple):
raise ValueError("preference tables must be lists or tuples")
n = len(proposers)
if n > 20 or len(receivers) != n: raise ValueError("equal sizes up to 20")
for rows in (proposers, receivers):
for row in rows:
if type(row) not in (list, tuple) or len(row) != n or any(type(v) is not int for v in row) or set(row) != set(range(n)):
raise ValueError("complete strict preferences")
ranks = [{v:i for i,v in enumerate(row)} for row in receivers]
free, next_choice = deque(range(n)), [0]*n
owner, partner = [None]*n, [None]*n
while free:
p = free.popleft()
r = proposers[p][next_choice[p]]
next_choice[p] += 1
old = owner[r]
if old is None or ranks[r][p] < ranks[r][old]:
owner[r], partner[p] = p, r
if old is not None: partner[old] = None; free.append(old)
else: free.append(p)
return partnerコードを修正する前に割り当ての要件を明示する
割り当て機能に必要なのは組の一覧だけではありません。どの入力が有効で、どのような結果なら受け入れられるかも明確にする必要があります。PairCrestは、関連するプロジェクトファイルを使って要件を話し合えるWindows向けAIコーディング環境です。アプリケーションが受け取る選好と守るべき制約から始め、現在の実装の確認を依頼してください。
安定した選好マッチングの例は、開発作業の一例です。完全な順位付けの検証方法、処理中の未割り当て対象の表現、最終的な組が呼び出し側に渡るまでを確認できます。同順位、欠けた選好、人数の異なるグループが要件に含まれる場合は、適応を依頼する前にその不一致を特定してください。例の限定的な前提が隠れたアプリケーション方針にならないよう、議論の間ずっと明示しておきます。
無検閲AIモデルは、対応するOpenAI互換またはAnthropicのエンドポイント経由で選択できる場合があり、必要に応じて認証情報を使います。コンテキスト、ツール、制限はモデルとサーバーによって決まります。提案された入力チェックと結果処理をレビューし、結果を確認できる小さな選好表でテストしてください。別途用意するローカルのモデルサーバーが担当するのは推論だけで、ほかのツールは外部サービスに接続する場合があります。
選好に基づく機能を明確にする
役立つ割り当て要件とはどのようなものですか?
グループ、許可する選好の形式、最終的な割り当てが満たすべき性質を記述します。人が確認できる小さな例を示してください。アプリケーションが結果をどう評価すべきかを示さずに「最適」のような広い意味の言葉を使うのは避けます。
周囲の仕様を変えずに同順位を追加できますか?
そうだと決めつけないでください。この例は完全で同順位のない選好を前提にしています。同順位は入力表現と、受け入れ可能な結果の意味の両方を変え得ます。アルゴリズムや呼び出し側の変更案をレビューする前に、その決定を明示的に求めてください。
大きなテストデータセットなしで出力を確認するには?
小さな選好表から始め、結果の組が指定した性質を満たすか確認します。拒否する動作をテストするため、無効な順位付けも含めてください。これらの限定的なケースはレビューを支援しますが、より広い入力要件と統合要件はアプリケーション自身のテストスイートで検証すべきです。
PairCrestは利用者にとって何が公平かを決めますか?
このソフトウェア環境は割り当て方針を定義しません。要件を提示し、その影響を評価するのは利用者です。アシスタントに実装の前提を説明させ、それがアプリケーションで使う意図の規則に一致するか確認してください。
PairCrest · 更新日 2026-10-25