Ryoji Tanabe
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee
    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee
  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       owned this note    owned this note      
    Published Linked with GitHub
    Subscribed
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    Subscribe
    # 田邊研究室でのROUTEテーマ候補 [toc] ## TSPに対するアリコロニー最適化のソフトウェアの実装 [模擬講義動画](https://www.youtube.com/watch?v=CWLc14GOPpg)にて, アリコロニー最適化の解説をしました. その説明資料を作る際に, ざっとPythonでアルゴリズムを実装してみました. が, 結局未完成のままでした. その未完成のPythonコードは[こちら](https://drive.google.com/file/d/1h3XMzS_JM5p4qE3QBSJbvEBWIddcOZcq/view?usp=sharing)からダウンロードできます. このテーマの目標は, 上記の未完成のPythonコードを完成させることです. イメージ的に, [伊庭先生の研究室で提供されているJavaソフトウェア](http://www.iba.t.u-tokyo.ac.jp/software.html)のように, 探索過程が可視化できればいいなと思っています. アルゴリズムの実装は既にできていますので, 後はGUIが実装できればいいなと思います. 本テーマは研究要素はないです. プログラミングの勉強がてらに, 何でもいいからとりあえず作ってみたいという方にお勧めです. ## 水のフレーバーの対話型進化計算による最適化 **背景** 水や炭酸水に加えるフレーバーがいくつか販売されています. 簡単に自宅でオリジナルフレーバードリンクを楽しめます. メーカーからは推奨されていないと思いますが, いくつかのフレーバーをブレンドして自分だけのオリジナルのフレーバーを作ることもできます. **問題** しかし, (1) どのフレーバーを, (2) どの割合でブレンドすればいいのかは不明です. また, 嗜好は個人に依存するため, 万人に対して最適な(1)と(2)は存在しません. また, ブレンドフレーバーの良し悪しを評価するためには実際に自分で試飲する必要がありますが, 胃の容量は有限であることから試飲可能な回数は限られています. **本テーマ** Human-in-the-loopな[対話型進化計算](https://www.jstage.jst.go.jp/article/jjsai/13/5/13_692/_article/-char/ja/) で(1)と(2)を最適化を試みます. ユーザが主観的に解の良し悪しを評価する (今回の場合は試飲) 対話型進化計算ならば, 適当にブレンドするよりも良いフレーバーを求めることが期待されます. 本テーマは学術研究というよりも, アプリ開発です. 使用プログラミング言語は何でもOKです. [「Optunaでおいしいコーヒーの淹れ方を探索する」](https://qiita.com/shu65/items/68d161b02a91396e854a)のやり方がそのまま使えるかもしれません. ## 味わいフローチャート図の対話型進化計算による最適化 [例えばこのお菓子](https://www.malebranche-shop.jp/ic/1001)の味わいフローチャート図のようなものを自動生成できたらいいなというテーマです. こうした味のことは私は全くわかりませんが, こうした図があると, そのお菓子を食べるときに楽しくなります. どんな人手ででも作れると思いますが, 進化計算で自動生成できたら便利かなと思います. 予め図形や当てはまるフレーズをそれぞれ数パターン用意しておき, 固定長の解でフローチャート図を表現します. 目的関数はその解 (フローチャート図) が実際の味わいの変化をどのくらい表していたかです. もちろん「味わいの変化をどのくらい表していたか」は客観的に評価できませんので, 人間が主観的に評価する必要があります. 研究というよりも, アプリケーション開発の要素が強いです. 英語論文として発表するというよりも, GitHubに書いたコードをアプロードし, Qiitaに記事を書くのがとりあずの目標になりそうです. ## SciPyのブラックボックス最適化手法の自動アルゴリズム構成 **背景** SciPyはPythonの数値計算ライブラリです. その中でも, [SciPy optimize](https://docs.scipy.org/doc/scipy/reference/optimize.html) は様々な連続最適化手法を提供します. SciPy optimizeは簡単に利用できるため, 工学分野にて幅広く使用されています. **問題** 一般的に, 最適化アルゴリズムの性能はハイパーパラメータの設定に強く依存します. 不適切なハイパーパラメータを使用した場合, 期待通りの結果が得られないことがあります. しかし, SciPy optimizeのいくつかのブラックボックス最適化手法 (differential_evolutionなど) のハイパーパラメータのデフォルト設定は不適切である可能性があります (https://easychair.org/publications/preprint/MtB7). **本テーマ** SciPy optimizeのブラックボックス最適化手法を自動アルゴリズム構成することで, より良いハイパーパラメータ設定を求めてみましょう. 自動アルゴリズム構成には, 機械学習分野にて一般的な[SMAC](https://automl.github.io/SMAC3/master/) を使用します. 本テーマの実験は全てPythonで完結します. より良い設定が見つかれば, 全世界のSciPyユーザの役に立ちます. ## 選好に基づく多目的最適化へのTPBの拡張 **Colabでのデモ** - [EMOアルゴリズム](https://colab.research.google.com/drive/1rVQA2QCF49DXt_88hcIoZXQIv-4Q-UUe?usp=sharing) - [PBEMOアルゴリズム](https://colab.research.google.com/drive/12fkUpw43STew1osV-WZbMf2_v49J6Fb0?usp=sharing) **背景** 目的関数の計算が高価なため, 解の評価をたかだか数十回, 数百回しかできない場合が実問題ではあります. このような問題設定に対して, [A two-phase framework with a Bézier simplex-based interpolation method (TPB)](https://arxiv.org/abs/2203.15292) は設計されました. TPBはその名のとおり2つの段階から成ります. 1段階目ではスカラー化関数の最適化を適当な単目的最適化手法 (論文中では[BOBYQA](https://numericalalgorithmsgroup.github.io/pybobyqa/build/html/index.html)) でします. 1段階目にて得られた最良解集合Bは, 2段階目にてベジエ単体モデルのフィッティングに使用されます. ベジエ単体モデルでBを補完するような解を生成します. 先行研究では, 2目的最適化にてTPBは良好な性能を示すことを報告しています. **問題** TPBはパレートフロント全体を近似する非劣解集合の獲得のために設計されました. しかし, 実応用では意思決定者の選好情報が利用でき, パレートフロントの一部分のみを近似しさえすれば良い場合があります. そのような選好情報が利用できる場合においても, TPBには選好情報を扱うことができません. **本テーマ** TPBを拡張し, 選好情報を扱えるようにします. 例えば[スカラー化関数に基づくEMOアルゴリズムに選好情報を組み込む汎用的な手法](https://arxiv.org/abs/1701.05935)を使えば, 意外と簡単にできるかもしれません. 楽観的ですが, [TPBのPythonプログラム](https://github.com/ryojitanabe/tpb)をゴリゴリ修正するということにはならないと思います. ## HMO-CMA-ESのWarm-Start PhaseのPythonでの再実装 **背景** 2目的black-box最適化のために設計された[HMO-CMA-ES](https://arxiv.org/abs/1605.02720)は, 合計4つのアルゴリズムを逐次的に実行します. この逐次実行は良いanytime性能 (いつ探索を止めても良い解が得られる) の実現を目的としています. HMO-CMA-ESは2016年に提案されましたが, 2023年現在でもstate-of-the-artな性能を示しています. 特に, 極少数の計算資源で数理的最適化手法[BOBYQA](https://numericalalgorithmsgroup.github.io/pybobyqa/build/html/index.html)を逐次実行する第1段階 (warm-Start phase) は, 多目的Bayesian optimizationやsurrogate-assisted進化型多目的最適化手法と比べても良好な性能を有します. **問題** 2023年現在でも非常に優れた性能を有するHMO-CMA-ESですが, その後続研究はなく, アルゴリズムの性質がよくわかっておりません. 特にwarm-start phaseの性能は目を見張るものがありますが, これまで特に注目されていませんでした. HMO-CMA-ESが注目をあまり集めていない原因として, 1) アルゴリズムが複雑, 2) コードがC++とMatlabで実装されており実行しづらいという点が考えられます. もしこれらを解決できれば, 優れた最適化手法を世界中のユーザがより手軽に使用でき, かつHMO-CMA-ESの解析に有益です. **本テーマ** 本研究ではHMO-CMA-ESのwarm-start phaseをPythonで再実装します. 論文に書かれたアルゴリズムを元に, C++とMatlabで実装されたオリジナルのコードをPythonで移植する作業がメインです. [参考になりそうなプログラム](https://github.com/ryojitanabe/tpb)を昔書いたことがありますので, 完全にフルスクラッチというわけではありません. 余裕があればwarm-start phaseの解析をしても良さそうです. ## 代表的なベイズ最適化手法のMixed-integer BBOB Function Setにおけるベンチマーキング **背景** ベイズ最適化手法は目的関数の計算コストが高いブラックボックス最適化問題に対して有用です. 自動機械学習の分野では頻繁に使用されています. [optuna](https://www.preferred.jp/ja/projects/optuna/) や[SMAC](https://automl.github.io/SMAC3/master/) などの様々なPythonライブラリが開発されています. **問題** 進化計算コミュニティでは整数混合最適化問題の研究はあまりされておりません. その中でも, 目的関数の計算コストが高く, 解の評価回数が厳しく制限される状況を想定した研究は特にされておりません. 実応用では高コストなシミュレーションにより解を評価する状況は現れうるため, 効果的な最適化手法が望まれます. **本テーマ** optunaやSMACにて利用可能な, 汎用的なベイズ最適化手法を[mixed-integer BBOB function suite](https://github.com/numbbo/coco) でベンチマーキングします. 現在利用可能な最適化手法がどの程度の性能を有するのか明らかにすることで, 今後の後続研究にベースラインを提供します. 本テーマの実験は全てPythonで完結します. ## Solis-Wets法の高次元ブラックボックス最適化問題でのベンチマーキング **背景** [Solis-Wets法](https://www.math.ucdavis.edu/~rjbw/mypage/Miscellaneous_files/randSearch.pdf) は1981年に提案された古典的なブラックボックス最適化手法です. 一方, [いくつかの先行研究](https://link.springer.com/article/10.1007/s00500-010-0647-2) ではSolis-Wets法は高次元 (設計変数の多い) ブラックボックス最適化問題にて有用であると報告しています. **問題** しかし, Solis-Wets法のベンチマーキング研究は不十分で, どのような問題でうまく動作するのか, 次元数に対するスケール性などの重要な情報が不明です. **本テーマ** Solis-Wets法を自分でフルスクラッチ実装して, 複数のテスト関数でベンチマーキングします. これにより, Solis-Wets法の性能に関する知見の獲得を目指します. ## ハイパーパラメータチューニングにおける多様性最適化 **背景** 一般的にハイパーパラメータチューニングでは1つのパラメータ設定しか獲得できません. **問題** もし同じ効用を有する複数のパラメータ設定が獲得できれば, アルゴリズムの解析に役立ちます. パラメータAが小さければパラメータBを大きくする必要がある (vice versa) などです. **本テーマ** ハイパーパラメータチューニングにおける多様性最適化をします. 得られたパラメータ設定群がどのくらい多様なのかを計測するため, 連続値パラメータのみを扱います. とりあえず既存の多様性最適化手法を簡単なパラメータチューニング問題に適用してうまく動作するか確認します. 例えばERTが12345以下のパラメータが欲しい, などという問題設定にしても良さそうです. ## 疑似乱数生成器がHypervolume近似法の性能に与える影響の解析 **背景** 進化型多目的最適化の分野において, hypervolume (N次元空間の体積のようなもの) は非常に重要です. ほとんどの研究はhypervolumeに基づき手法の性能の良し悪しを議論しています. しかし, 目的数 (次元数) が増加すると, hypervolumeの計算コストは高くなり, 現実的な時間では計算できなくなる場合があります. この問題を解決するために, 厳密なhypervolume値の計算を諦めて, モンテカルロ法で値を近似しようというアプローチがあります. 単純に, ランダム生成した点が領域内に入った割合で体積を推定します. **問題** コンピューターシミュレーションでは疑似乱数 (真の乱数ではない) が乱数として一般的に使用されます. 疑似乱数を生成するために, 線形合同法やメルセンヌツイスタなど, これまでに様々な生成器が提案されています. 一方, 疑似乱数生成器がモンテカルロ法に基づくhypervolumeの近似法に与える影響はよくわかっておりません. もし特定の疑似乱数生成器を使用することによって近似値が悪化するようですと, 大きな問題になります. **本テーマ** 疑似乱数生成器がモンテカルロ法に基づくhypervolume近似法に与える影響を明らかにします. アルゴリズムは同じでも, プログラムにおいてどの疑似乱数生成器を使うかで性能が (恐らく) 変化する, というアルゴリズムを実装する上での落とし穴を体験してもらうという目的もあります. ソボル列などの超一様分布列, ラテン超方格サンプリングなどを疑似乱数生成器として使用してみても面白いかもしれません. ## 制約付きブラックボックス最適化における適応Differential Evolutionの振る舞いの解析 **背景** 適応Differential Evolution (DE) は無制約単目的ブラックボックス最適化にて良好な性能を有することが報告されています. 適応DEでは自身の制御パラメータを適応的に自動で調整します. **問題** 無制約単目的ブラックボックス最適化におけるパラメータ適応メカニズムはある程度解析されています. しかし, 制約付きブラックボックス最適化における解析はほとんどされていません. 制約の有無でどのようにパラメータ適応が変化するのかがわかれば, 新しいより効率的な適応DEの設計が期待できます. **本テーマ** 制約付きブラックボックス最適化における適応DEの振る舞いを解析します. 直感的に, 制約違反空間と目的空間の性質は異なりますので, 実行不可能領域と実行可能領域を探索する際のパラメータ適応はそれぞれ異なるはずです. ## 適応Differential Evolutionにおける成功の定義の再考 **背景** 適応DEでは個体ごとに制御パラメータを生成し, 目的関数値f(x)が改善できれば成功, できなければ失敗とラベル付けします. そして, 成功と判定されたパラメータ群を用いて, 次世代のパラメータ生成分布を更新します. 田邊の先行研究にて, 適応型DEは目的関数値f(x)が悪い個体はどのようなパラメータでもf(x)を改善できる可能性が高いことを明らかにしました. **問題** つまり, f(x)が悪い個体ではほぼランダムにパラメータを生成しても成功と判定されることが多いということです. 対象問題に適していない, 適当なパラメータも成功と判定されてしまうと, パラメータ生成分布の更新に余計なノイズが入ってしまいます. **本テーマ** 成功の定義を再考します. 例えば, 親個体を基準にせずに, 集団中の個体の目的関数値の中央値を基準にする, noveltyを使うなどすれば, より良い「成功の定義」が定義できるかもしれません. このコンテクストではありませんが, 実際にこうしたアイディアを試した先行研究はあります.

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully