Я работаю над расширенной моделью Рэфтери, которая является более общей моделью цепей Маркова более высокого порядка, в которой мне нужно решить следующую модель линейного программирования с определенными ограничениями.
Ниже приведена функция линейного программирования (ссылка), которую необходимо свести к минимуму:
![](https://i.stack.imgur.com/eCaR0.png)
в зависимости от:
![](https://i.stack.imgur.com/jg2QT.png)
Где векторы "W" и "λ" должны быть решены в уравнении.
Q и X - матрица вероятностей i-ступенчатого перехода и вероятности стационарного состояния соответственно.
Ниже приведен пример, с которым я работаю:
import numpy as np
one_step_array = np.array([[0.12, 0.75, 0.12],
[0.42, 0.14, 0.42],
[0.75, 0.25, 0.0]])
two_step_array = np.array([[0.43, 0.23, 0.33],
[0.43, 0.44, 0.11],
[0.20, 0.59, 0.20]])
steady_state = np.array([0.38, 0.39, 0.21])
Q_Arr = np.vstack((np.matmul(one_step_array,steady_state),np.matmul(two_step_array,steady_state))).transpose()
from pulp import *
w1 = LpVariable("w1",0,None)
w2 = LpVariable("w2",0,None)
w3 = LpVariable("W3",0, None)
L1 = LpVariable("L1",0,None)
L2 = LpVariable("L2",0,None)
prob = LpProblem("Problem",LpMinimize)
prob += w1 >= steady_state[0] - Q_Arr[0][0]*L1 - Q_Arr[0][1]*L2
prob += w1 >= -steady_state[0] + Q_Arr[0][0]*L1 + Q_Arr[0][1]*L2
prob += w2 >= steady_state[1] - Q_Arr[1][0]*L1 - Q_Arr[1][1]*L2
prob += w2 >= -steady_state[1] + Q_Arr[1][0]*L1 + Q_Arr[1][1]*L2
prob += w3 >= steady_state[2] - Q_Arr[2][0]*L1 - Q_Arr[2][1]*L2
prob += w3 >= -steady_state[2] + Q_Arr[2][0]*L1 + Q_Arr[2][1]*L2
prob += w1 >= 0
prob += w2 >= 0
prob += w3 >= 0
prob += L1 >= 0
prob += L2 >= 0
prob += L1 + L2 == 1
prob += w1+w2+w3
status = prob.solve(GLPK(msg=0))
LpStatus[status]
print (value(w1))
print (value(w2))
print (value(w3))
print (value(L1))
print (value(L2))
Результат равен (λ1, λ2, w1, w2, w3) = (1,0,0,051,0,027,0,14) вместо (1,0,0.028,0.0071,0.0214), что неверно.
Не могли бы вы сообщить мне, где я иду не так?