2

私は独学でプログラミングを勉強していますが、この問題を解決する方法を知りたいです。

与えられた抵抗と与えられた値のリセットを備えた一連の抵抗器が与えられました。これらの抵抗器の特定の数を選択できます。抵抗値ができるだけ近い回路を作成するにはどうすればよいですか? プログラマーは、遺伝的アルゴリズムを使用できるが、私はそのような使用に限定されていないと私に言いました。

キルヒホッフの法則を使用して方程式の線形システムを作成する必要があると思いますが、電気の問題や線形システムへの数値アルゴリズムの経験があまりないため、それらを作成する方法についていくつかのガイダンスが必要ですシステムは常に変化するため、式はコンピュータのメモリに自動的に保存されます。また、アルゴリズムがより良い解に収束することを確認するにはどうすればよいでしょうか?

問題は、フィンランドのディスカッション フォーラムからのものです。

4

3 に答える 3

3

抵抗器は直列または並列のいずれかで存在でき、それらの抵抗の合計は異なります (直列の場合は値を追加し、並列の場合は逆数を追加します)。

直列および並列の抵抗器のネットワークを作成することもできます。

これは、再帰的なデータ構造の古典的なケースのように思えます。おそらく、バイナリ式ツリーと同様の方法でツリーとして表すことができます: http://en.wikipedia.org/wiki/Binary_expression_tree

いくつかの探索的なツリー構築を組み合わせると (Prolog がこれを行う方法を調べる必要があります)、合計に近づく抵抗器の最適な組み合わせを見つけることができます。

このアプローチには遺伝的アルゴリズムはありませんが、ツリーの構築と改良に遺伝的アプローチを採用することはできます。

于 2012-09-24T14:05:38.477 に答える
0

遺伝的アルゴリズムに限定されていない場合は、線形計画法を使用してこの問題を解決することもできると思います。以下のように問題をエンコードし、ソルバーに答えを求めることができます。

Required Resistance Of Circuit = x ohms

// We want to have total 33 resistors.
selected_in_series_1 + selected_in_series_2 +... + selected_in_series_211 + selected_in_parallel_1 + selected_in_parallel_2 + ... + selected_in_parallel_211 = 33

// Resistor in Series
(selected_in_series_1 * Resistor_1) + (selected_in_series_2 * Resistor_2) + ..(selected_in_series_211 * Resistor_211) = total_resistence_in series

// Similarly write formula for parallel
(selected_in_parallel_1 * 1/Resistor_1) + (selected_in_parallel_2 * 1/Resistor_2) + ..(selected_in_parallel_211 * 1/Resistor_211) = 1/total_resistence_in parallel

total_resistence_in series + total_resistence_in parallel = Required Resistance Of Circuit
于 2012-09-24T15:33:56.253 に答える
0

遺伝的アルゴリズムを適用するには、抵抗ネットワークの「DNA」を表現、変異、結合する方法を見つける必要があります。

1つの方法は次のとおりです。

  1. 抵抗器セット (ワイヤを表す) にいくつかの 0 オーム抵抗器を追加します。
  2. 抵抗器に 1 から N までの番号を付けます
  3. いくつかの M について、ソース (1) とシンク (M) を含む M 個のジャンクションのセットを想像してください。
  4. 各抵抗器の 2 つのエンドポイントが接続されているジャンクションを、ネットワークの一意の識別子として定義できます。これは、1..M の範囲の整数ペアの N タプルにすぎません。このタプルは「DNA」になります。

それで:

  1. ランダムなタプルから一連のランダムなネットワークを生成します。
  2. 各ネットワークの抵抗を計算する
  3. 目標抵抗から最も離れた人口の一部を破棄します。
  4. それらのランダムなペアを組み合わせて、新しいネットワークを形成します。(おそらく、50% の確率で親 A または親 B から各抵抗器エンドポイントをランダムに選択することによって)
  5. いくつかのエンドポイントをランダムに変更します (ミューテーション)。
  6. 後藤2

実際にこれとまったく同じように機能するかどうかはわかりませんが、一般的なアイデアはわかります。

間違いなく、より優れた非遺伝的アルゴリズムがありますが、遺伝的アルゴリズムを具体的に要求したので、そこに行きます.

于 2012-09-24T14:33:07.060 に答える