MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

線形二次レギュレータ(Linear-Quadratic Regulator:LQR)の概要とPythonサンプルコード

目次

  • 目次
  • はじめに
  • LQRの概要
  • PythonによるLQRの制御シミュレーション
  • Githubリポジトリ
  • LQRのパラメータのチューニング方法
    •  チューニング方法1
    • チューニング方法2
    • チューニング方法3
  • 参考資料
  • MyEnigma Supporters

はじめに

最近、ロボットの制御や経路生成の勉強をしているのですが、

しばしば出てくる技術として、

線形二次レギュレータ(Linear-Quadratic Regulator:LQR)があります。

今回はこのLQRの概要とLQRによる

簡単なPython制御シミュレーションコードを紹介したいと思います。

続きを読む

MATLABの凸最適化ライブラリCVXの使い方とサンプルコード

目次

  • 目次
  • はじめに
  • CVX: MATLAB Software for Disciplined Convex Programming
  • インストール
    • 1. ソフトをzipで落としてきて、解凍
    • 2. CVXを起動する
  • シンプルな凸最適化を解く
  • 変数がベクトルの場合の凸最適化
  • 参考資料
  • MyEnigma Supporters

はじめに

先日、最適化技術の一つである凸最適化の基礎に関する

記事を書きましたが、

myenigma.hatenablog.com

この凸最適化を実際に解くライブラリの中で最も有名なのが、

CVXというライブラリです。

今回はこのライブラリの概要と実際に凸最適化を解くための

サンプルコードについて説明したいと思います。

 

続きを読む

凸最適化(Convex Optimization)の基礎

 

目次

  • 目次
  • はじめに
  • 凸最適化の概要と種類
    • 線形計画法 (Linear programming)
    • 二次計画法 (Quadratic programming)
    • 二次錐計画問題(Second-order cone programming, SOCP)
    • 整数計画問題 (Mixed Integer programming)
  • 凸最適化の専門用語
    • unbounded
    • infeasible
    • active, inactive
    • redundunt
  • 凸集合と凸関数
    • Convex Set (凸集合)
    • Convex function(凸関数)
  • 凸最適化の利点
    • 1. 大域的な最適値を得ることができる。
    • 2. 最適化の計算が早い
  • 関数の凸性の判定
  • 制約付き最適化の判定法(KKT条件)
  • 凸最適化の解法アルゴリズム
    • 逆行列、反復無しニュートン法(制約条件が無い二次計画問題)
    • Active set method: 有効制約法
    • Interior point method: 内点法
  • 凸最適化用ツール
    • 最適化モデリングツール
      • CVXPY
      • CVX
      • YALMIP
      • AMPL
      • cvxgen
      • JuMP
      • GAMS
      • Pyomo
    • PC向け凸最適化ソルバー
      • cvxopt
      • Ipopt
      • SeDuMi
      • SDPT3
      • IBM CPLEX
      • Gurobi
      • MOSEK
    • 組み込み用凸最適化ソルバー
      • qpOASES
      • OOQP
      • ECOS
      • CVXGEN
      • FiOrdOs
      • FORCES or (FORCES PRO)
  • 凸最適化の応用例
    • 線形計画法の応用例
    • ポートフォリオ最適化
    • 画像復元
    • サポートベクターマシン
    • 線形MPC(モデル予測制御)
  • より詳しく凸最適化を学びたい人は
  • 参考資料
  • MyEnigma Supporters

はじめに

先日、最適化技術の概要について説明しましたが、

myenigma.hatenablog.com

今回は、最適化技術の一つである凸最適化(Convex Optimization)の

基礎について説明したいと思います。

 

続きを読む

ロボット工学のための最適化技術入門

 

目次

  • 目次
  • はじめに
  • 最適化とは?
  • 最適化の応用例
    • ポートフォリオ最適化
    • 電子回路における部品サイズの最適化
    • データフィッティング
    • ロボット工学
  • 最適化問題の解き方
    • 最小二乗法問題
    • 制約無し最適化
    • 線形計画法問題
    • 二次計画法問題
    • 凸最適化
  • 最適化ツール群
    • C++製非線形最適化ライブラリCeres Solver
    • MATLAB製 凸最適化モデリングライブラリ CVX
    • Python製 凸最適化モデリングライブラリ CVXpy
    • 凸最適化Cコードジェネレータ cvxgen
  • 参考資料
  • MyEnigma Supporters

はじめに

最新のロボット技術の重要な技術として、

確率・統計の技術も重要ですが、

もう一つよく利用されるのが最適化技術です。

 

特に、パスプランニングや制御などでよく利用されます。

近年は様々なプラットフォームで利用可能な、

最適化ツール(ソルバー)が気軽に利用できるので、

ソルバーにデータを入れれば

求めている答えを得ることができることも多いです。

 

しかし、やはりそのようなツールを使うとしても、

背景にある技術を知ることも重要だと思うので、

自分で少し勉強した内容をまとめておきたいと思います。

 

下記で述べる内容は基本的に下記の資料を参考にまとめました。

いずれも素晴らしい資料ですので、

より詳しく学びたい方は下記の資料を参考にしてもらえると良いと思います。

Convex Optimization

Convex Optimization

 

続きを読む

線形計画法(Linear Programming)の概要とPython, Juliaでの解き方

目次

  • 目次
  • はじめに
  • 線形計画法の概要
  • 線形計画法を解く方法
    • シンプレックス(単体法)
    • 内点法
  • Pythonによる線形計画法の解き方
    • cvxoptを使う方法
    • scipyを使う方法
  • Juliaにおける線形計画法の解き方
    • シンプルな線形計画問題
    • シンプルな線形計画問題2
    • JuMPによる最小二乗法解法サンプルコード
    • JuMPによる混合整数最適化問題の解法
    • JuMPによるナップサック問題の解法サンプルコード
    • ナップサック問題におけるcvxpyとJuMPの計算速度比較
  • 最大流問題(Max Flow Problem)の解き方
  • 最小コストネットワークフロー問題
  • より詳しく線形計画法を学びたい人は
  • 参考資料
  • MyEnigma Supporters

はじめに

先日、最適化問題の一つの方式として二次計画法の概要と、

Pythonでの解き方を紹介しましたが、

myenigma.hatenablog.com

 

今回はもっと多くの分野で使われている

最適化問題の一つである

線形計画法(Linear Programming)の概要と、

同じくいくつかの言語やライブラリでの

解き方を紹介したいと思います。

 

続きを読む

点列データから曲率を計算するPythonサンプルコード

目次

  • 目次
  • はじめに
  • Pythonコード
  • 1. 円フィッティングにより、曲率を計算する方法
  • 2. 方位差分による曲率計算
  • 3. 点列の二次微分を近似して計算する方法
  • 4. 4次のルンゲクッタで二次微分を近似する方法
  • 上記の方法の比較 
  • 参考資料
  • MyEnigma Supporters

はじめに

たまに点列データから、

その点列の滑らかさを評価するために、

近似的に曲率を計算したくなる時があります。

 

今回は、

いくつかの点群データから曲率を計算する方法の紹介と、

それらをPythonで実装したコードを公開したいと思います。

 

続きを読む

二次計画法(Quadratic Programming)の概要とPythonソルバーcvxoptの使い方

目次

  • 目次
  • はじめに
  • 二次計画法(Quadratic Programming)とは?
  • 二次計画法のPythonソルバーcvxopt
  • インストール方法
  • CVXOPTで簡単な二次計画問題を解いてみる。
  • cvxoptにおける等式制約の注意点
  • 制約の緩和のためのスラック変数の導入
    • ∞ノルム法によるスラック変数
    • 1ノルム法によるスラック変数
  • 大規模な二次計画問題のベンチマークテスト
  • 参考資料
  • MyEnigma Supporters

はじめに

先日、Googleが開発した

非線形最適化ソルバーCeres Solverの使い方を説明しましたが、

myenigma.hatenablog.com

同じ非線形最適化でも、ある特別な形をしている最適化問題の場合、

より効率的に解ける場合があります。

 

その中でも有名なのが、二次計画法(Quadratic Programming)です。

今回はこの二次計画法の概要の説明と、

二次計画法を解くための

Pythonソルバーcvoptの使い方を説明したいと思います。

続きを読む

3次スプライン補間の概要とC++, Pythonサンプルコード

 

目次

  • 目次
  • はじめに
  • 各種スプラインにおける連続性
  • 3次スプライン補間とは?
    • 条件1
    • 条件2
    • 条件3
    • 条件4
    • 条件5
  • 3次スプライン補間を手計算+pythonで解く
  • 入力データ数が不定な場合の3次Spline補間
  • Pythonサンプルコード
  • C++サンプルコード
  • 3次スプラインにおける曲率の計算方法
  • x-y座標系における点群のスプライン補間
    • 方位の計算方法
    • 曲率の計算方法
  • 参考資料
  • MyEnigma Supporters

はじめに

3次スプライン補間は、

計算がそこまで複雑ではなく、

また二次微分までの連続性が担保されているため、

様々な用途に利用されています。

 

今回の記事では、

この3次スプライン曲線の概要と、

3次スプライン曲線を作成する

C++, Pythonのサンプルコードを作成したので、

公開したいと思います。

 

続きを読む

バークレーとサンフランシスコでおすすめのレストランメモ

 

目次

  • 目次
  • はじめに
  • Berkeley
    • Sushi Ko
    • Seasons of Japan
    • Sushi Secrets
  • 参考資料
  • MyEnigma Supporters

はじめに

実際に行ってみてよかった所のメモです。

続きを読む

GoogleのC++最適化ライブラリCeres Solverを使って制約付き最適化問題を解いてみる

目次

  • 目次
  • はじめに
  • 制約付き最適化
  • Ceres Solverで制約付き最適化問題を解く
  • 参考資料
  • MyEnigma Supporters

はじめに

今回もGoogleのC++最適化ライブラリCeres Solverを使ってようという記事です。

(これまでの関連記事は末尾のリンクを参照下さい)

 

今回は、これまでは制約条件の無い最適化問題を解いてきましたが、

制約条件付きの最適化問題を解いてみようと思います。

 

続きを読む