.. -*- coding: utf-8 -*- はじめに ======== Nuorium Optimizer は数理計画問題を解くための汎用ソルバであり, PySIMPLE は数理計画問題を記述するモデリング言語です. 本節は Nuorium Optimizer/PySIMPLE の基本的な機能に関するチュートリアルです. 本節を一読していただければ,Nuorium Optimizer/PySIMPLE の基本的な利用方法がご理解いただけると思います. 数理計画問題とは ------------------ 数理計画問題とは,「与えられた条件の下で,望ましさの尺度を表す何らかの関数の最小値(最大値)を求め, さらにその最小値(最大値)を与える不特定要素の値を決定する」という問題です. 上記における,「与えられた条件」は制約条件,「望ましさの尺度を表す関数」は目的関数, 「不特定要素」は変数と一般に呼ばれています. この用語を用いて書き直すと,数理計画問題とは, 「制約条件を満たす範囲における目的関数の最小値(最大値)及びその最小値(最大値)を与える変数を求める問題」 といえます. 例えば,:math:`x\ge 0` において :math:`3x+2` の最小値を求める問題は,数理計画問題です. この場合,制約条件は :math:`x\ge 0`,目的関数は :math:`3x+2`,変数は :math:`x` となります. この問題は数理計画の世界では次のように書かれます: * 目的関数: :math:`3x+2` → 最小化 * 制約条件: :math:`x\ge 0` 考える間もなく,上記の数理計画問題の最もよい目的関数値は 2(:math:`x=0` のとき)となります. このときの変数の値を最適解と呼びます. 最適解を求めることを「数理計画問題を解く」あるいは「最適化する」といいます. .. _how_to_solve: 数理計画問題を解く ------------------ ``sample.py`` というファイルに以下を記述してみましょう.:: from pysimple import Problem, Variable problem = Problem(type=min) x = Variable() problem += 3*x + 2 problem += x >= 0 problem.solve() この状態で sample.py のあるフォルダに行き,コマンドプロンプトから ``python sample.py`` と入力してみましょう.:: $ python sample.py [About Nuorium Optimizer] Nuorium Optimizer 26.1.0 build:f2d78da8 , Copyright (C) 1991 NTT DATA Mathematical Systems Inc. [Problem and Algorithm] PROBLEM_NAME Problem NUMBER_OF_VARIABLES 1 NUMBER_OF_FUNCTIONS 2 PROBLEM_TYPE MINIMIZATION METHOD HIGHER_ORDER [Progress] ......... res=3.0e-03 .... 2.1e-10 [Result] STATUS OPTIMAL VALUE_OF_OBJECTIVE 2 ITERATION_COUNT 5 FUNC_EVAL_COUNT 8 FACTORIZATION_COUNT 6 RESIDUAL 2.077775694e-10 ELAPSED_TIME(sec.) 0.04 この一連の操作で,あなたは Nuorium Optimizer を使って次の数理計画問題を解いたことになります. ここで ``python`` は PySIMPLE をインストールしたときの Python 環境です. 以降,python コマンドは PySIMPLE をインストールしたときの Python 環境を指します. インタプリタから実行することもできます.``python -i`` と入力してインタプリタを起動させてみましょう.:: $ python -i Python 3.12.2 (tags/v3.12.2:6abddd9, Feb 6 2024, 21:26:36) [MSC v.1937 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from pysimple import Problem, Variable pysimple 1.5.0 (2024-01-25 20:40:57 +0900 f8ef972) Copyright (C) 2019 NTT DATA Mathematical Systems Inc. All Rights Reserved. >>> problem = Problem(type=min) >>> x = Variable() >>> problem += 3*x + 2 >>> problem += x >= 0 >>> problem.solve() # 以下同様の出力 Windows 環境では `Nuorium 統合環境 `_ からも実行できます. インストール時に PySIMPLE が予めインストールされた Python が同梱されており, これは「Python\@Nuorium」を選択した状態で実行ボタン (F5) を押すことで実行できます. .. image:: ../images/nuorium.png :align: center ユーザが指定する Python を用いる場合には,以下の方法で実行できます. python コマンドにパスが通っている場合 「デフォルト」を選択して実行ボタン(F5)を押してください. 現在編集中の拡張子を見て, ``.py`` である場合にはパスが通っている Python を呼び出します. なお,このような拡張子ごとの「デフォルト」選択時の挙動は, ``ユーザフォルダ\AppData\Roaming\nuorium\editor\defaultrc.json`` から設定できます. python コマンドにパスが通っていない場合 例えば python が「``ユーザフォルダ\\Anaconda3``」に存在する場合, ``ユーザフォルダ\AppData\Roaming\nuorium\editor\userrc.json`` を次のように変更して, 新たに「Python」という実行単位を追加します. .. code-block:: json { "Python": { "command": "ユーザフォルダ\\Anaconda3\\python", "args": ["|fullname|"], "options": { "cwd": "|directory|" } } } ここで用いた実行単位名「Python」は例であり,他の区別可能な名称を用いて構いません. 以上に述べました詳細については,Nuorium 上で [メニューバー] → [ヘルプ] → [Nuorium リファレンスマニュアル (PDF)](F1) の 3.6 節「JSON ファイルの設定方法」をご確認ください. Nuorium 上でターミナルを起動して,コマンドを実行することもできます. Ctrl-P を押すか,[メニューバー] → [設定] → [シェル設定] で開くシェル設定画面からターミナルを起動します. 起動後,Nuorium 上にプロンプト画面が表示されますので,PySIMPLE をインストールした Python を呼び出します.