アプリケーションノート 3981

HFTA-15.0サーミスタ回路網と遺伝学


要約: このアプリケーションノートは、温度補償のためのサーミスタのアプリケーションについて検討します。また、最適な回路条件を迅速に特定することができる遺伝的アルゴリズムについても簡単に説明します。このアルゴリズムの実例を使用して、電圧-温度間の特定の関係を成立させる最適な抵抗とNTCサーミスタの値を非常に容易に決定することができることを示します。

はじめに

問題:図1の回路トポロジにおいて、図2に示す電圧-温度間の関係を成立させる抵抗とNTCサーミスタの値を求めてください。(注:標準的な値のみを使用すること)

Figure 1. Thermistor network.
図1. サーミスタ回路網

Figure 2. Voltage vs. temperature curve.
図2. 電圧と温度の関係

この問題は、教科書にはあまり出てきませんが、サーミスタ回路網を使用して能動素子に温度補償を適用しようとするときに誰もが遭遇する実際的な問題です。人によっては、図1の回路を見ながら、メモ用紙と多数の等式を使って解を求めることができるかも知れません。そうでない人は、おそらく単にシミュレータやスプレッドシートに値を入れてみて、グラフとの間に可能な限りの近似が得られるまで、少しずつ値を調整していくことになるでしょう。

上記いずれの方法を使う場合でも、解に関係する変数の数と温度依存性を考えると、この回路の最適解を求めるのは大変であることが分かります。実用的な答えを得るために標準的な値だけに制限されている点も、難しさを増す原因になっています。1組の条件についてこの回路の解を求めるだけならよいですが、複数の条件、回路構成、希望する応答について解を求めるとなると大変な手間でしょう。回路構成が(よりよい温度応答を提供するため)複雑になってくると、記号を用いる方法や経験的な方法では、あまりに複雑すぎて(またはあまりに時間がかかりすぎて)、最適解を求めるのは不可能という場合が多くなります。これに対して、遺伝的アルゴリズムなどの数値的方法なら、これらの問題を迅速かつ容易に解くことができます。

遺伝学という単語と回路という単語が同じ文脈に現れることはほとんどありませんが、これから見るように、遺伝的プロセスを適用して図1のような回路中の部品の値を求めることが可能です。この記事では、温度補償のためのサーミスタのアプリケーションについて検討するとともに、遺伝的アルゴリズムについて簡単に説明します。その後、遺伝的アルゴリズムの実例を使用して上記の基本的問題を迅速に解く方法を示します。

サーミスタ回路網のアプリケーション

サーミスタ回路網は、様々な種類の回路アプリケーションに温度補償を適用するために広く使用されています。たとえば、電源回路やPWM出力などの調節や、トランジスタ、アンプ回路、レーザダイオードなどに温度補償されたバイアス電流を供給するために、サーミスタ回路網が使用されます。サーミスタ回路網には数多くのアプリケーションが存在するため、必要な補償(回路網の値)は、アプリケーションおよびデバイスごとに大きく異なります。

図2は、光ファイバ通信リンクアプリケーションで使用されるレーザダイオードに必要な補償の例です。通信リンクの品質を維持するためには、温度の変化に応じてレーザダイオードへのバイアス電流を調節する必要があります。図3に示す回路を使用することによって、温度補償されたバイアス電流をレーザに適用することができますが、希望する電圧-温度間の関係(図2)に合わせて最適な値を決定する必要があります。遺伝的アルゴリズムを使用すれば、わずか数秒で理想に近い解を求めることが可能です。

Figure 3. Thermistor network with the MAX3643 burst-mode laser driver.
図3. バーストモードレーザドライバMAX3643とサーミスタ回路網

遺伝的アルゴリズム

遺伝的アルゴリズムは、遺伝プロセスを模倣することで多変数問題の最適解を求める最適化アルゴリズムです。遺伝的アルゴリズムが初めて使用されたのは1950年代ですが¹、コンピュータ技術とプロセッサ速度の進歩によって広く使用されるようになったのは、この15~20年ほどです。

最も単純な場合、このアルゴリズムはまずランダムな集団、またはあらかじめ定義された開始点の集団を作成します。集団(図4)の中の個々の集団要素(個体)は、その構造(遺伝暗号)を定義する変数の配列で構成されます。各集団要素の初期化が終わると、1組の基準を使用してその性能を測定し、他のすべての要素と比較します。その後、性能に従って集団要素のソートを行います。低ランクの要素を排除して(自然淘汰)、前世代の最も優れた集団要素の変数(遺伝暗号)を交叉することによって新しい世代の要素を作成します(図5)。

Figure 4. Illustration of the population with K population elements, each composed of N variables.
図4. それぞれN個の変数で構成されたK個の集団要素からなる集団

Figure 5.Illustration of the process of mixing the variables (i.e., the genetic code) from one generation to the next.
図5. 1つの世代から次の世代に向けて変数(遺伝暗号)を交叉するプロセス

ここまでのステップが完了したところでプロセスのループを許せば、集団は短時間で共通の、まったく同じ遺伝暗号だけの飽和状態にするでしょう。最小値は見つかりますが、それが全体の最小値であるとは限りません。集団の飽和もしくは局所的最小値への収束を防ぐためには、集団要素の変数の突然変異(ランダムな変化)と、新しいランダムな要素とを、集団に導入する必要があります(図6)。

Figure 6. Illustration of the process of introducing random elements into a generation's population.
図6. ある世代の集団にランダムな要素を導入するプロセス

導入すべきランダム性の頻度と量は、アプリケーションによって異なります。導入するランダム性が多すぎると、アルゴリズムが理想解に収束する時間がなくなります。ランダム性が少なすぎると、全体の最小値が見つかるまでに極めて長い時間がかかります。したがって、導入するランダム性の量を試行錯誤で調節するか、あるいは集団の飽和の増大に応じてより多くのランダム性を導入するという動的な設定が必要になります。

遺伝的アルゴリズムの他にも、より高速な最適化アルゴリズムが存在します。しかし、それらの多くは多変数問題を解くためのプログラムがより複雑であり、局所的最小値に収束する場合が多くなります。遺伝的アルゴリズムは、これらの問題を克服しています。

遺伝的アルゴリズムはランダムなプロセスに基づいているため、絶対的な最適解への収束に必要な時間もランダムになります。平均の収束時間は、各集団要素内の変数の数が多いほど長くなります。特定のアプリケーションに対する性能基準の決定と計算も、アプリケーションによっては難しい場合があります。簡単に言うと、最適解がどのようになるかを示す等式を書くのが困難な場合があるということです。図1に示したサーミスタ回路のような単純な受動回路の場合は、性能基準を明確に定義することが可能で、記述も容易です。変数の数が少ないため、解も妥当な時間で見つけることができます。したがって、こうしたタイプの回路の解を求めるのには、遺伝的アルゴリズムが最適です。

実例

無償版のVisual Basicコンパイラを使用して²、希望の応答(図2)に適合するサーミスタ回路網の値(図1)を求める簡単なルーチンを作成しました。この実例のソースコードおよび実行可能ファイルをダウンロードすることができます。

アルゴリズムをソフトウェアで実装するに当たって、以下のような基本的ステップを使用しました。
  1. 各集団要素内の変数として使用することができる、利用可能な抵抗とサーミスタの値を定義する。利用可能な抵抗用に1つと、利用可能なサーミスタ用にもう1つ、配列を宣言する。
  2. ランダムな要素の集団を生成する(この例では100個の要素で集団を構成)。各集団要素は、回路(図1)内の各部品に相当するエントリを含んだ配列とする。
  3. 温度変化に対して希望する回路網の電圧または抵抗値を等式化し、その応答をグラフにする。その後、多項式を使用して希望する電圧/抵抗値をコードに取り入れる。
  4. 各集団要素の平均二乗誤差を計算する。
  5. 誤差最小から誤差最大への順で集団をソートして、最良の解をグラフにする。
  6. 最悪の解を排除して、残った要素をランダムまたは何らかの方式に従って組み合わせて第2世代の集団要素を作成する。
  7. 新しいランダムな集団要素の導入、または既存の1つ以上の集団要素内の1つ以上の変数に対するランダムな変更によって、ランダム性を導入する。
  8. ステップ4に戻り、平均二乗誤差が十分に小さくなってユーザがプロセスの終了を決定するまで繰り返す。
ここまで読んで、「これでなぜ回路網の値が求まるのだろう?」という疑問を感じるかも知れません。ちょうど遺伝と進化の関係と同じように、1つの状態から別の状態へと解が「成長」するのです。最適解とは、本質的に環境(希望の回路応答)に対する最良の遺伝暗号(回路要素の値)です。まだ納得が行かないようなら、それでも構いません。この後で実際の例の結果を見れば、不安も解消するでしょう。

ソフトウェアのグラフィカルユーザインタフェースを図7に示します。このインタフェースから、サーミスタ回路網の構成を選択して、多項式を使用して希望の応答を入力することができます。総抵抗値と電圧のどちらについて解を求めるか、最適化を行う温度範囲、および1%または5%の抵抗値を使用するかどうかの選択が可能です。「Run」ボタンをクリックするとアルゴリズムが開始されます。その後はプログラムの実行に伴って、平均二乗誤差、繰り返し回数、および現時点での最良の解に相当する部品の値が更新されます。

Figure 7. Software makes the process of determining the thermistor values to match the desired response very simple.
図7. 極めて単純な手順で希望の応答に適合するサーミスタ値を求めることができるソフトウェア

希望の応答(緑の線)と現時点での最良の解(赤の線)を示すグラフも表示されます。コンピュータが30回繰り返しを行った後のグラフィック出力を図8に示します。図から分かるように、応答は理想的なものではありません。500回の繰り返し(約10秒かかります)の後では、非常に良好な応答が生成されています(図9)。少し休憩する間プログラムを実行させたままにしておくと図10に示す結果になり、ほぼ完全に一致します。

Figure 8. Voltage vs. temperature curve shows the actual and desired output after 30 iterations.
図8. 30回の繰り返し後における電圧-温度間の実際の関係と希望の関係を示すグラフ

Figure 9. Voltage vs. temperature curve shows the actual and desired output after 500 iterations.
図9. 500回の繰り返し後における電圧-温度間の実際の関係と希望の関係を示すグラフ

Figure 10. Voltage vs. temperature curve shows how the actual and desired output now match.
図10. 電圧-温度間の実際の関係と希望の関係が一致したグラフ

図1を参照先として使用すると、この解は次のような部品の値で構成されます。
  • R1 = 8.2k、R2 = 3.6k、R3 = 2.2k、R4 = 1.1k
  • TH1 = 47k Beta = 4700、TH2 = 40 Beta = 2750
収束の速度は、テストごとに変化します。単純な回路構成の場合は、はるかに短時間で収束します。より複雑な回路構成の場合、または1%の抵抗値を使用する場合は、選択対象の変数が増えるため、一般的に収束時間が長くなります。

これらすべてを視野に入れた上で、2個のサーミスタと4個の抵抗で構成された回路網については、標準的な部品の値のみを使用して、30秒以内で希望の温度応答に対する良好な一致を得ることができました。

回路の問題を解くために遺伝学をどのように利用しているかまだ理解できない場合は、プログラムをダウンロードして実際に試してください。遺伝的アルゴリズムの使用によってサーミスタ回路網の解が短時間で求まることに驚かされるでしょう。



参照
  1. www.wikipedia.com、「Genetic Algorithm (遺伝的アルゴリズム)」
  2. Microsoft® Visual Basic 2005 Express Editionからダウンロード
同様の記事が、「EDN」のWebサイトで2008年3月19日に発表されています。