見出し画像

No. 5 C++で学ぶ最適化ソフトウェア開発:ー画面出力にこだわる話ー

※忙しい人はタイトルと太字だけ読めば大体OK

No. 5です!ソフトウェアの方も大体形になってきて,ついつい話がマニアックになりがちですね.今日は,ソフトを実行した時に画面に出力される値についてお話ししていこうと思います!

ソフトウェア開発が想像とちょっと違う?

 筆者の最適化ソフトウェア開発にお付き合いいただいている人たちの職種や専門性は把握していませんが,おそらくプログラミングの初学者の方もそれなりに含まれているのではないでしょうか?で,そういった人たちは思っているはずです.

「こいつが開発してる最適化なんたらいうソフト,なんか見た目地味じゃね?」

はい,分かりやすく可視化してみました:

同じソフトウェアのはずなのになんか違う...

多くの人はa)のようなものを期待しているのに,筆者が見せる画面といえばb)みたいなしょぼいもの,という感じに違和感を持った人も多いのではないでしょうか?実はどちらも本質的には同じものなのですが,見た目はえらい違いです.そう,使用者に対して視覚的に分かりやすい操作感を提供するGUI(Graphical User Interface)と呼ばれる部分を筆者は用意していないのです.その代わりに,コマンドやテキストファイルでプログラムに指示を出し,結果をまた別のファイルに書き出してもらっています.機能がマニアックかつ複雑過ぎて,それらを活かし切る適切なGUIの設計ができないというわけです.無理やり設計しようものなら,おかしな仕様変更やそれに伴う実行速度の低下などを招く危険性すらあります.

で,このようなソフトの場合,画面に出力する情報が結構重要です.計算終了時の結果や,場合によっては途中の値も出力しながら実行することで,結果の即時確認やバグ取りなんかが格段に効率化されるからです.ということで,どんな値を,どんな形式で画面に出力するかが開発や使用において結構大事なんですね.

画面に出す情報を精査するハナシ:

 ということで,画面に出す情報として何を選ぶ?ということを考える必要が出てきます.Hello worldなら特に考えることは無いのですが,実際に仕事で使うようなソフトウェアを自分で組む場合は次のようなことを意識すると良いでしょう:

  • ソフト開発はほぼバグ取り

  • 情報が多すぎると追いきれない

  • 使用者は結果とそこに至る理由が知りたい

売り物ならいざ知らず,このような手作りのソフトウェアは,作っている状態から使い出す状態への移行に明確な区別がないことが多いです.まだ画面出力とか整えてないけど,ちょっと結果出してみよう.みたいなことはまま起こるわけですね.また,やってみると分かるのですが,プログラミングとは基本的にバグ取りとの戦いになりがちです.あまり想像したくないですが,使い出してから軽微な(希望)バグに出くわすことは十分あり得ます.そういう時に,バグの原因を特定できるような情報が画面に逐一表示されていると助かります.ただ,あれもこれも手当たり次第に画面出力していると,情報が多すぎて追いきれないという事態も発生し得ます.ちょっと開発途中の実行画面をお見せしますね:

開発中に動かしている画面.スクロールしても読み切るのが大変な程度には情報が表示されている.

当たり前のようですが取捨選択も重要です.また,実際に人(自分や他人)が完成版に近いものを使う段階のことも重要です.優れたソフトウェアが計算結果の値を出力したとしても,そこに至るまでの過程や用いたパラメータの情報はやはり欲しいもの.それらを意識して画面に出るように調整することは重要に思います.

開発中のソフトではどんな情報を出してる?

 最適化ソフトウェアの開発はある程度順調に進めております.No. 4で書いた通り,実は14年前に一度リメイク作業をしているので,作るべきものが全くわ分かっていない,というわけでもないのです.さて,そんな開発の中,画面出力情報はどうなっているのかと言いますと,まぁそれなりに苦戦しています笑
まずは最初の画面を見てみましょうか:

最適化ソフトウェア実行時の画面

ここでは,設定ファイルから読み込んだ最適化問題の初期設定が表示されるようにしています.例えば,最適化する変数の数は2なのでN: 2,変数の範囲を指定する条件式が4つなのでMI: 4という形ですね.また,その設定値が書かれたファイルがSQPというフォルダの中にあるOptSet2.txtなので,File Name: SQP/OptSet2.txtという表示も出しています.

次は実行中の画面にいきましょう:

実行中画面

この画面は,最終的に仕上げてしまった後には出さないであろう情報も含まれています.というのも,この最適化計算は「ちょっとずつ値を変えて最適値の方に向かう」という性質があることから,結構な繰り返し演算が行われます.なので,その繰り返し演算の度に値を出していたら画面が埋まってしまうんですよね.ただ,開発中は簡単な問題を解かせながら動作チェックをするので,こういった中間値を表示させています.他の研究者のことは知りませんが,筆者はこのような手をよく使います.例えばX[0]とかX[1]は最適化している変数の値で,現在は4と-2という初期値がそのまま入っています.その後の細々した表示は,Xが動ける範囲に収まっているか,未知数を探すための変数がどういう値をしているか...のような専門的な情報になります.

最後は,作りかけの結果の図:

計算結果の図(作りかけ)

計算結果は現状こんな感じで出力されます.今回,Xの値はX[0] = X[1] = 0が正解なのですが,X[0] = 0.0000000291,X[1] = 0.00000270とそれなりの精度で求められている・・・うーん,ほんとかな?まぁ開発途中なのでよしとしましょう笑

色々と情報が出ていますが,コレだけ見えていれば使用者も結果について判断することができると思います.ただ,細かい部分は色々と調整不足です.例えば一番上の文字は中心からずれているし,Xが丸括弧()なのにその下のCは四角括弧[]… まだまだ人に渡せるレベルにはないですね.

今回のまとめ

 さて,No. 5は画面出力にこだわる話をしてみました.筆者的には結構大事なことだと思うのですが,後半の内容がマニアックすぎて読者の方々が退屈だったのではないかとちょっと心配しとります.次回はもう少し読み物として楽しい方向に持っていきたいなぁと.それでは,次回もお楽しみに!

Kengo HISAKAWA


いいなと思ったら応援しよう!