2.1. はじめに¶
Nuorium Optimizer は数理計画問題を解くための汎用ソルバであり, PySIMPLE は数理計画問題を記述するモデリング言語です.
本節は Nuorium Optimizer/PySIMPLE の基本的な機能に関するチュートリアルです. 本節を一読していただければ,Nuorium Optimizer/PySIMPLE の基本的な利用方法がご理解いただけると思います.
2.1.1. 数理計画問題とは¶
数理計画問題とは,「与えられた条件の下で,望ましさの尺度を表す何らかの関数の最小値(最大値)を求め, さらにその最小値(最大値)を与える不特定要素の値を決定する」という問題です.
上記における,「与えられた条件」は制約条件,「望ましさの尺度を表す関数」は目的関数, 「不特定要素」は変数と一般に呼ばれています. この用語を用いて書き直すと,数理計画問題とは, 「制約条件を満たす範囲における目的関数の最小値(最大値)及びその最小値(最大値)を与える変数を求める問題」 といえます.
例えば,\(x\ge 0\) において \(3x+2\) の最小値を求める問題は,数理計画問題です. この場合,制約条件は \(x\ge 0\),目的関数は \(3x+2\),変数は \(x\) となります.
この問題は数理計画の世界では次のように書かれます:
目的関数: \(3x+2\) → 最小化
制約条件: \(x\ge 0\)
考える間もなく,上記の数理計画問題の最もよい目的関数値は 2(\(x=0\) のとき)となります. このときの変数の値を最適解と呼びます.
最適解を求めることを「数理計画問題を解く」あるいは「最適化する」といいます.
2.1.2. 数理計画問題を解く¶
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 27.1.0 build:7491abe3
<with META-HEURISTICS engine "wcsp"/"rcpsp">
<with Netlib BLAS>
, 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]
<preprocess begin>.........<preprocess end>
<iteration begin>
res=3.0e-03 .... 2.1e-10
<iteration end>
[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.01
この一連の操作で,あなたは Nuorium Optimizer を使って次の数理計画問題を解いたことになります.
ここで python
は PySIMPLE をインストールしたときの Python 環境です.
以降,python コマンドは PySIMPLE をインストールしたときの Python 環境を指します.
インタプリタから実行することもできます.python -i
と入力してインタプリタを起動させてみましょう.:
$ python -i
Python 3.13.2 (tags/v3.13.2:4f8bb39, Feb 4 2025, 15:23:48) [MSC v.1942 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from pysimple import Problem, Variable
pysimple 1.6.0 (2025-02-17 16:12:35 +0900 c93cf43)
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) を押すことで実行できます.

ユーザが指定する Python を用いる場合には,以下の方法で実行できます.
python コマンドにパスが通っている場合
「デフォルト」を選択して実行ボタン(F5)を押してください. 現在編集中の拡張子を見て,
.py
である場合にはパスが通っている Python を呼び出します. なお,このような拡張子ごとの「デフォルト」選択時の挙動は,ユーザフォルダ\AppData\Roaming\nuorium\editor\defaultrc.json
から設定できます.
python コマンドにパスが通っていない場合
例えば python が「
ユーザフォルダ\\Anaconda3
」に存在する場合,ユーザフォルダ\AppData\Roaming\nuorium\editor\userrc.json
を次のように変更して, 新たに「Python」という実行単位を追加します.{ "Python": { "command": "ユーザフォルダ\\Anaconda3\\python", "args": ["|fullname|"], "options": { "cwd": "|directory|" } } }ここで用いた実行単位名「Python」は例であり,他の区別可能な名称を用いて構いません.
以上に述べました詳細については,Nuorium 上で [メニューバー] → [ヘルプ] → [Nuorium リファレンスマニュアル (PDF)](F1) の 3.6 節「JSON ファイルの設定方法」をご確認ください.
Nuorium 上でターミナルを起動して,コマンドを実行することもできます. Ctrl-P を押すか,[メニューバー] → [設定] → [シェル設定] で開くシェル設定画面からターミナルを起動します. 起動後,Nuorium 上にプロンプト画面が表示されますので,PySIMPLE をインストールした Python を呼び出します.