我想用流利NHibernate來建模Markov chain。它基本上是一組不同狀態之間的轉換概率。流利NHibernate:模型馬爾可夫鏈
我想將轉換概率映射爲MarkovState.TransitionProbabilities作爲Dictionary。我想用下一個狀態作爲密鑰(使用MarkovState或INT爲重點),讓我可以像查詢:
float probability = currentState.TransitionProbabilities[nextState.Id].Probability;
我的數據庫模型:
CREATE TABLE MarkovState
(
Id int IDENTITY(1,1) NOT NULL,
StateContent varchar(10) NOT NULL
);
CREATE TABLE TransitionProbability
(
Id int IDENTITY(1,1) NOT NULL,
CurrentState_Id int NOT NULL,
NextState_Id int NOT NULL,
Probability float NOT NULL
);
我的類:
public class MarkovState
{
public virtual int Id { get; private set; }
public virtual string StateContent { get; set; }
public virtual IDictionary<int, TransitionProbability> TransitionProbabilities { get; set; }
}
public class TransitionProbability
{
public virtual int Id { get; private set; }
public virtual MarkovState CurrentState { get; set; }
public virtual MarkovState NextState { get; set; }
public virtual float Probability { get; set; }
}
我的地圖:
class MarkovStateMap : ClassMap<MarkovState>
{
public MarkovStateMap()
{
Id(x => x.Id);
Map(x => x.StateContent);
HasMany<TransitionProbability>(x => x.TransitionProbabilities)
.AsMap(x => x.NextState.Id)
.KeyColumn("CurrentState_Id")
.Not.LazyLoad()
.Inverse();
}
}
class TransitionProbabilityMap : ClassMap<TransitionProbability>
{
public TransitionProbabilityMap()
{
Id(x => x.Id);
Map(x => x.Probability);
References(x => x.CurrentState);
References(x => x.NextState);
}
}
但是,此映射似乎使用CurrentState
作爲關鍵字,而不是NextState
。我甚至不知道這種模式是否可行。如果您認爲此模型無效,請提出替代方案。
我不禁想你應該保存這是一個簡單的矩陣,並使用專爲這些類型的數學問題(例如Math.NET)工具。 – Tristan 2010-02-10 19:02:52
@Tristan:借調,除非有充分的理由使用數據庫。 @Francois Botha:你爲什麼要使用數據庫?你的數據來自哪裏? – 2010-06-30 23:20:59
轉換概率將由管理員用戶(精算師)管理,因此我們將其存儲在數據庫中。州的數量也可能發生變化,儘管這種情況不會經常發生。 – 2010-07-06 08:44:07