pulpを用いて、目的関数の最適化を試みました。
具体的には、van-genunchenの式である
θ(h) = θr + θs - θr/[1+(αh)n]mのパラメータの最適化を行おうとしました。
上の式では、θr, α, nがパラメータです。
h は実測値を投入します。
最終的には、実測値のθとθ(h)の差を出して、それを最小化させようと致しました。
が、
unsupported operand type(s) for ** or pow(): 'LpAffineExpression' and 'LpVariable
というエラーが出ました。
以下のコードは、https://qiita.com/asukame/items/9b55daa3d5758030aea4を参考にしてかきあげました。
python
1from pulp import * 2import numpy as np 3import pandas as pd 4import matplotlib.pyplot as plt 5import datetime 6import matplotlib.dates as mdates 7%matplotlib inline 8 9data = pd.read_excel(') 10 11s = LpProblem(sense=LpMinimize) # 数理モデル 12x = LpVariable('x', lowBound=0, cat=LpInteger) # 変数 13z = LpVariable('z', lowBound=0, cat=LpInteger) # 変数 14n = LpVariable('n', lowBound=0, cat=LpInteger) # 変数 15 16c = data["Ridge"].iloc[3:,1] 17b = data["Ridge"].iloc[3:,2] 18y = 0.386 19 20目的関数(van genunchen式) 変数{ θr:x, θs:y, α:z, h, n, m=1-1/N } 21s = 0 22 23for a,d in zip(b, c): 24 25 s += (a - (x + (y-x)*((1+(z*h)**n)**(1/n-1))))**2 26 27 28 29m.solve() # ソルバーの実行 30 31print(value(x), value(y), value(z), value(m.objective))
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/18 09:41