読者です 読者をやめる 読者になる 読者になる

MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

制御初心者のための線形・非線形, 連続・離散システム入門

線形離散時間システム入門 - 基礎からScilab/MATLABシミュレーションまで

線形離散時間システム入門 - 基礎からScilab/MATLABシミュレーションまで

目次

  • 目次
  • はじめに
  • 非線形システムの線形化
  • 連続システムから離散システムへの変換
    • オイラー法
    • Zero-Order Hold: ZOH法
    • Pythonによる連続システムから離散システム変換関数
  • システムの安定性
    • 線形システムの安定性
    • 非線形システムの安定性
  • 参考資料

はじめに

個人的な感覚ですが、

制御技術を学んでいると、

線形・非線形、連続・離散というのは、

なんとなく理解できますが、

実際に制御システムを設計したい時に、

具体的にどのようにすればいいかというのは、

わかりにくいと感じていました。

 

今回、

実際に制御システムを設計する上で必要な、

線形、非線形、連続・離散システム関連の

基礎的な内容をまとめておきたいと思います。

 

続きを読む

車両モデリングのためのタイヤの力学とスタビリティファクタの基礎

目次

  • 目次
  • はじめに
  • 車両のスリップを表す値
  • スリップ率 (すべり率)
  • スリップ角 (すべり角)
  • タイヤ特性
  • タイヤモデル: 線形モデルとMagic Formula
  • ステアリングファクタの見積もり
  • 参考資料

はじめに

以前書いた記事の内容が長くなってしまったので、

myenigma.hatenablog.com

タイヤの力学関係と、

スタビリティファクタ関連の内容をこちらに移動しました。

続きを読む

Python製凸最適化モデリングツールCVXPYの使い方

A First Course in Optimization Theory

A First Course in Optimization Theory

目次

  • 目次
  • はじめに
  • CVXPYとは?
  • インストール方法
  • CVXPYによる最小二乗法のサンプルコード
  • シンプルな最適化問題を解いてみる(その2)
  • シンプルなモデル予測制御をCVXPYで解いてみる
  • CVXPYを使う時の基礎
    • 名前空間
    • 最適問題の変更
    • 最適化問題が解けない場合の状態管理
    • ベクトルと行列
    • 制約条件
    • パラメータ
  • CVXPYにおける関数
    • 演算子
    • インデクシングとスライシング
    • 転置
    • べき乗
    • スカラー関数
    • 要素関数
    • ベクター/行列関数
  • 参考資料

はじめに

先日、最適化技術の一つである

線形計画法や二次計画法の紹介をしましたが、

myenigma.hatenablog.com

myenigma.hatenablog.com

最適化の式が、そこで紹介した標準形と同じでないと

最適化が実現できないという問題があります。

 

実はかなりの数の最適化の問題は、

上手く数式変換することで

上記の標準形に変換することができます。

このような変換を自動的に実施するソフトを

最適化モデリングツールと呼ぶのですが、

今回はこの最適化モデリングツールの一つであり、

Python製のCVXPYというツールの紹介をしたいと思います。

 

続きを読む

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

Design and Implementation: Linear Quadratic Regulator

Design and Implementation: Linear Quadratic Regulator

目次

  • 目次
  • はじめに
  • LQRの概要
  • PythonによるLQRの制御シミュレーション
  • Githubリポジトリ
  • 参考資料

はじめに

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

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

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

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

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

続きを読む

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

MATLAB

Convex Optimization

Convex Optimization

目次

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

はじめに

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

記事を書きましたが、

myenigma.hatenablog.com

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

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

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

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

 

続きを読む

凸最適化(Convex Optimization)の基礎

凸解析と最適化理論 (数理情報科学シリーズ)

凸解析と最適化理論 (数理情報科学シリーズ)

目次

  • 目次
  • はじめに
  • 凸最適化とは?
  • 凸最適化の専門用語
    • unbounded
    • infeasible
    • active, inactive
    • redundunt
  • 凸集合と凸関数
    • Convex Set (凸集合)
    • Convex function(凸関数)
  • 凸最適化の利点
    • 1. 大域的な最適値を得ることができる。
    • 2. 最適化の計算が早い
  • 関数の凸性の判定
  • 制約付き最適化の判定法(KKT条件)
  • 凸最適化用ツール
    • 最適化モデリングツール
      • CVXPY
      • CVX
      • YALMIP
      • AMPL
      • GAMS
    • PC向け凸最適化ソルバー
      • cvxopt
      • Ipopt
      • SeDuMi
      • SDPT3
      • IBM CPLEX
      • Gurobi
      • MOSEK
    • 組み込み用凸最適化ソルバー
      • qpOASES
      • OOQP
      • ECOS
      • CVXGEN
      • FiOrdOs
      • FORCES or (FORCES PRO)
  • より詳しく凸最適化を学びたい人は
  • 参考資料

はじめに

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

myenigma.hatenablog.com

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

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

 

続きを読む

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

optimization

Convex Optimization

Convex Optimization

 

目次

  • 目次
  • はじめに
  • 最適化とは?
  • 最適化の応用例
    • ポートフォリオ最適化
    • 電子回路における部品サイズの最適化
    • データフィッティング
    • ロボット工学
  • 最適化問題の解き方
    • 最小二乗法問題
    • 制約無し最適化
    • 線形計画法問題
    • 二次計画法問題
    • 凸最適化
  • 参考資料

はじめに

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

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

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

 

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

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

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

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

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

 

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

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

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

 

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

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

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

Convex Optimization

Convex Optimization

これなら分かる最適化数学―基礎原理から計算手法まで

これなら分かる最適化数学―基礎原理から計算手法まで

 

続きを読む

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

optimization Programming Python

文科系の線形計画法入門

文科系の線形計画法入門

目次

  • 目次
  • はじめに
  • 線形計画法の概要
  • Pythonによる線形計画法の解き方
  • より詳しく線形計画法を学びたい人は
  • 参考資料

はじめに

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

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

myenigma.hatenablog.com

今回はもっと多くの分野で使われている最適化問題の一つである

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

同じくPythonでの解き方を紹介したいと思います。

 

続きを読む

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

Python

幾何学入門〈上〉 (ちくま学芸文庫)

幾何学入門〈上〉 (ちくま学芸文庫)

目次

  • 目次
  • はじめに
  • 円フィッティングにより、曲率を計算する方法
  • コードの公開場所
  • 参考資料

はじめに

たまに点列データから、

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

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

 

今回は、

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

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

 

続きを読む

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

Optimal Quadratic Programming Algorithms: With Applications to Variational Inequalities (Springer Optimization and Its Applications)

Optimal Quadratic Programming Algorithms: With Applications to Variational Inequalities (Springer Optimization and Its Applications)

目次

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

はじめに

先日、Googleが開発した

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

myenigma.hatenablog.com

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

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

 

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

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

二次計画法を解くための

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

続きを読む