9月に発表予定だった資料の内容と、その後の進捗を報告します。
https://www.canva.com/design/DAGydrPcIPg/1GEdXeKGEM8VkBhzPXX-MA/edit?utm_content=DAGydrPcIPg&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton
↑資料のリンクです。詳しくはこちらをご覧ください。
最適化問題を解く
これまでは線形計画法(高校数学で習う)を使って最適解を求めていましたが、整数計画法という手法を使うように変更しました。Googleが公開している数理最適化専用ライブラリ、Google OR-toolsを利用しています。
最適化問題とは、「何らかの制約のもと、ある関数を最大化・最小化する」ことです。今僕が目指しているのは、「制約:栄養バランスが整っていること / 関数:合計価格の最小化」です。
さらにその最適解がすべて整数値であるように限定したのが、整数計画法です。

↑計算結果の表示画面
変数の値が1増減するのを、”鶏卵の個数が1個増減する”と対応するように制約式・目的関数を表現することで、解がより現実的になるよう修正することができました。ただ、計算にかかる時間がこれまでよりも長くなってしまうので、そこはもう少し工夫したいところです。
UIを設計する
計算処理がある程度完成したので、今は実際の画面デザインに取り組んでいます。Figmaというツールで大まかなデザインを作った後、細かな調整はコード上で行うようにして制作しています。

↑Figma
デザインのセンスは持ち合わせておらず、UI設計もよく分からないまま制作を始めました。なので、普段使っているアプリやサイトのUI(レイアウト・ボタン・画面遷移・表示内容など)を注意して見るようにして、色々と参考にしながら手探りで設計しています。
また、HTML,CSS,Javascript を本格的に使うのは初めてなので、とても苦戦しています。AIに聞いてみれば大抵のことは解決するのですが、あまり詳しくない言語である分、出てきたコードを自分で解釈するのに時間がかかりがちです。
その後の進捗
9月以降の主な進捗としては、以下の通りです。
- vue.js から spring boot へのAPI、CORS設定
- 栄養素、カロリーの寄与率を積み上げグラフとして表示する。

- E-statから得られる価格推移データを、グラフとして描画する。他の都市とも並べて表示できるようにする。

↑5kgのお米の価格推移。1年ちょっとで倍以上になっていて恐ろしい
さいごに
OR-toolsを導入して使えるようにするまで結構手間がかかったので、せっかくなら他の最適化問題に挑戦してみたいです。配送ルート最適化、シフト最適化、スケジューリング、生産計画・在庫最適化、巡回セールスマン問題など幅広い応用例があるようですが、今の所いい題材が思いつかないです…