@page "/markovchains"
@using Blazor.Extensions
@using Blazor.Extensions.Canvas
@using Blazor.Extensions.Canvas.Canvas2D
@using Esiur.Analysis.Graph
@inject IJSRuntime JsRuntime;
Topic 1: Defining QS and MC
Prof. Dr. Emad Al-Hemiary - Al-Nahrain University
@code {
private Canvas2DContext ctx;
protected BECanvasComponent CanvasRef;
private DateTime LastRender;
private int step = 0;
private DirectedGraph graph;
private void Jump()
{
graph.Step();
step++;
}
protected override void OnInitialized()
{
graph = new DirectedGraph();
var n1 = graph.AddNode(1, "1", 100, 300);
var n2 = graph.AddNode(2, "2", 500, 300);
graph.Link(n1, n2, (decimal)0.5, "1->2");
graph.Link(n1, n1, (decimal)0.5, "1->1");
graph.Link(n2, n1, (decimal)0.2, "2->1");
graph.Link(n2, n2, (decimal)0.8, "2->2");
//var n0 = graph.AddNode(1, "0", 100, 300);
//var n1 = graph.AddNode(1, "1", 300, 300);
//var n2 = graph.AddNode(2, "2", 500, 300);
//var n3 = graph.AddNode(3, "3", 700, 300);
//var n4 = graph.AddNode(4, "4", 900, 300);
//var n5 = graph.AddNode(0, "5", 1100, 300);
//graph.Link(n0, n0, (decimal)0.2, "00");
//graph.Link(n0, n2, (decimal)0.2, "02");
//graph.Link(n0, n3, (decimal)0.2, "03");
//graph.Link(n0, n4, (decimal)0.2, "04");
//graph.Link(n0, n5, (decimal)0.2, "05");
//graph.Link(n1, n0, (decimal)0.1, "10");
//graph.Link(n1, n1, (decimal)0.1, "11");
//graph.Link(n1, n2, (decimal)0.2, "12");
//graph.Link(n1, n3, (decimal)0.2, "13");
//graph.Link(n1, n4, (decimal)0.2, "14");
//graph.Link(n1, n5, (decimal)0.2, "15");
//graph.Link(n2, n1, (decimal)0.2, "21");
//graph.Link(n2, n2, (decimal)0.2, "22");
//graph.Link(n2, n3, (decimal)0.2, "23");
//graph.Link(n2, n4, (decimal)0.2, "24");
//graph.Link(n2, n5, (decimal)0.2, "25");
//graph.Link(n3, n2, (decimal)0.2, "32");
//graph.Link(n3, n3, (decimal)0.2, "33");
//graph.Link(n3, n4, (decimal)0.3, "34");
//graph.Link(n3, n5, (decimal)0.3, "35");
//graph.Link(n4, n3, (decimal)0.4, "43");
//graph.Link(n4, n4, (decimal)0.3, "44");
//graph.Link(n4, n5, (decimal)0.3, "45");
//graph.Link(n5, n4, (decimal)0.5, "54");
//graph.Link(n5, n5, (decimal)0.5, "55");
graph.Build();
for (var i = 0; i < graph.Nodes.Count; i++)
{
decimal sum = 0;
for (var j = 0; j < graph.Nodes.Count; j++)
{
sum += graph.TransitionMatrix[i, j];
}
if (sum != 1)
throw new Exception("Sum must be 1");
}
base.OnInitialized();
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
this.ctx = await CanvasRef.CreateCanvas2DAsync();
await JsRuntime.InvokeAsync