Excel Solverは、最適化問題を解くための強力なツールですが、Pythonでも同様の機能を実現することが可能です。具体的には、SciPyとNumPyというライブラリを使用します。
まず、以下のように必要なライブラリをインポートします。
import numpy as np
from scipy.optimize import newton
次に、Excel Solverで行うようなNPV(Net Present Value)の計算をPythonで行ってみましょう。以下の例では、キャッシュフローと割引率が与えられ、NPVが特定の値(ここでは180)になるような割引率を求めています。
cf = [30,45,52,67] # キャッシュフロー
rt = [.02,.03,.04,.05] # 割引率
# NPVを計算する関数
def make_fun(cf, ret, val):
def fun(d):
return val-sum([x[0]/(1+x[1]+d)**(i+1)for i,x in enumerate(zip(cf,rt))])
return fun
# newtonメソッドでNPVが180になる割引率を求める
newton(make_fun(cf, rt, 180), 0)
このコードを実行すると、NPVが180になるような割引率が求まります。
以上のように、PythonのSciPyとNumPyを使うことで、Excel Solverと同様の最適化計算が可能です。これにより、Pythonで複雑な最適化問題を解くことができます。