Пример #1
0
 private void RaiseEvidenceEntered(VertexEvidence vertexEvidence)
 {
     if (this.EvidenceEntered != null)
     {
         this.EvidenceEntered(this, vertexEvidence);
     }
 }
Пример #2
0
        private LineDataTable PopulateData(LineDataTable newTable, LineDataTable table)
        {
            if (newTable != null && table != null)
            {
                foreach (DataRow newrow in newTable.Rows)
                {
                    foreach (DataRow oldrow in table.Rows)
                    {
                        if ((double)newrow["From"] >= (double)oldrow["From"] &&
                            (double)newrow["To"] <= (double)oldrow["To"])
                        {
                            var count = 2; // skipping "From" and "To" coloumns

                            while (count < newTable.Columns.Count)
                            {
                                var evidence = new VertexEvidence();
                                evidence.Value = (oldrow[count] as VertexEvidence).Value;
                                // newrow[count] = oldrow[count];
                                newrow[count] = evidence;
                                count++;
                            }
                        }
                    }
                }
            }
            return(newTable);
        }
Пример #3
0
        private void RaiseEvidenceEntered(VertexEvidence vertexEvidence = null)
        {
            if (this.EvidenceEntered != null)
            {
                this.EvidenceEntered(this, vertexEvidence);
            }

            if (!this.IsAutoRunEnabled)
            {
                return;
            }

            if (this.Graph != null)
            {
                this.Graph.Belief = this.Network.Run(this.Graph.Evidence);
            }
        }
Пример #4
0
        private void GraphControl_EvidenceEntered(object sender, VertexEvidence vertexEvidence)
        {
            if (this.selectedRow != null && this.SelectedColumnName != null && this.SelectedVertex != null)
            {
                var selectRow = this.PipeLineData.UserDataObj[this.SelectedVertex.Key].UserTable.FirstOrDefault(row => row.Equals(this.selectedRow));

                if (selectRow != null)
                {
                    selectRow[this.SelectedColumnName] = vertexEvidence;
                }
            }

            if (vertexEvidence == null)
            {
                // this.LineDataChart.RemoveUserEvidence(this.GetChartCategory());
                // this.LineDataControl.ClearSelectedCell();
            }
        }
Пример #5
0
        public static SheetModel Read(Worksheet worksheet)
        {
            var sheetModel = new SheetModel();

            var row = 1;
            var col = 1;

            var key   = worksheet.ReadText(row, col);
            var value = worksheet.Read(row, col + 1);

            while (key != null)
            {
                sheetModel.SheetHeaders[key] = value;

                row++;
                key   = worksheet.ReadText(row, col);
                value = worksheet.Read(row, col + 1);
            }

            // Go to next row
            row++;

            // This row should contain the column headers.
            var columnHeader = worksheet.ReadText(row, col);

            while (columnHeader != null)
            {
                sheetModel.ColumnHeaders.Add(columnHeader);

                col++;
                columnHeader = worksheet.ReadText(row, col);
            }

            sheetModel.StartYear = Convert.ToInt32(sheetModel.SheetHeaders["Start Year"]);
            sheetModel.EndYear   = Convert.ToInt32(sheetModel.SheetHeaders["End Year"]);

            var fileName = sheetModel.SheetHeaders["Network File"].ToString();

            sheetModel.Network = Network.Read(fileName);
            sheetModel.Graph   = Graph.Read(sheetModel.Network);

            // For the vertex blocks we work with find.
            Range firstFind   = null;
            var   currentFind = worksheet.Cells.Find("Belief");

            while (currentFind != null)
            {
                if (firstFind == null)
                {
                    firstFind = currentFind;
                }
                else if (currentFind.Address == firstFind.Address)
                {
                    break;
                }

                row = currentFind.Row;
                col = currentFind.Column;

                // Get sectionId
                var sectionId = worksheet.ReadText(row, 1);

                if (!sheetModel.LineEvidence.ContainsKey(sectionId))
                {
                    sheetModel.LineEvidence[sectionId] = new Dict <int, string, VertexEvidence>();
                }

                // Get vertexKey
                var vertexKey = worksheet.ReadText(sheetModel.SheetHeaders.Count + 2, col);
                var vertex    = sheetModel.Graph.Vertices[vertexKey];

                col++;

                for (var year = sheetModel.StartYear; year <= sheetModel.EndYear; year++)
                {
                    value = worksheet.Read(row, col);

                    if (value != null)
                    {
                        var evidence = vertex.States.ParseEvidenceString(value.ToString());
                        sheetModel.LineEvidence[sectionId][year][vertexKey] = evidence;
                    }
                    else
                    {
                        var vertexEvidence = new VertexEvidence
                        {
                            Value = new double[vertex.States.Count]
                        };

                        var isEvidenceNull = true;

                        foreach (var state in vertex.States)
                        {
                            var i = vertex.States.IndexOf(state);

                            var stateValue = worksheet.Read(row + i + 1, col);

                            if (stateValue == null)
                            {
                                vertexEvidence.Value[i] = 0;
                            }
                            else
                            {
                                isEvidenceNull          = false;
                                vertexEvidence.Value[i] = Convert.ToDouble(stateValue);
                            }
                        }

                        if (!isEvidenceNull)
                        {
                            sheetModel.LineEvidence[sectionId][year][vertexKey] = vertexEvidence;
                        }
                    }

                    col++;
                }

                currentFind = worksheet.Cells.FindNext(currentFind);
            }

            return(sheetModel);
        }
Пример #6
0
 private void VertexControl_EvidenceEntered(object sender, VertexEvidence e)
 {
     this.RaiseEvidenceEntered(e);
 }
Пример #7
0
        public static Dict <string, EvidenceTable> Merge(Dict <string, NodeData> userDataObj, List <double> baseRowsList, Network network)
        {
            var unmergedEvidenceSet = new Dict <string, EvidenceTable>();
            var mergedEvidenceSet   = new Dict <string, EvidenceTable>();
            var newList             = new List <double>();

            if (baseRowsList != null)
            {
                newList = baseRowsList.ToList();
            }

            foreach (var kvp in userDataObj)
            {
                foreach (var row in kvp.Value.UserTable)
                {
                    var colNames = row.GetDynamicMemberNames().ToList();

                    foreach (var colName in colNames)
                    {
                        if (row[colName] == "")
                        {
                            row[colName] = new VertexEvidence {
                                Type = VertexEvidenceType.Null
                            };
                        }
                    }
                }
            }

            // Remove Empty EvidenceTables
            var deleteNodes = new List <string>();

            foreach (var kvp in userDataObj)
            {
                if (!kvp.Value.UserTable.Any())
                {
                    deleteNodes.Add(kvp.Key);
                }
                else
                {
                    var isEmpty = true;
                    foreach (var row in kvp.Value.UserTable)
                    {
                        foreach (var colName in row.GetDynamicMemberNames().ToList())
                        {
                            if ((row[colName] as VertexEvidence).Type != VertexEvidenceType.Null)
                            {
                                isEmpty = false;
                            }

                            if ((row[colName] as VertexEvidence).Type == VertexEvidenceType.Invalid)
                            {
                                row[colName] = new VertexEvidence {
                                    Type = VertexEvidenceType.Null
                                };
                            }
                        }
                    }

                    if (isEmpty)
                    {
                        deleteNodes.Add(kvp.Key);
                    }
                }
            }

            foreach (var key in deleteNodes)
            {
                userDataObj.Remove(key);
            }

            foreach (var kvp in userDataObj)
            {
                unmergedEvidenceSet.Add(kvp.Key, kvp.Value.UserTable);
            }

            // Generate a list which holds the modified section ranges
            foreach (var kvp in unmergedEvidenceSet)
            {
                var evidenceTable = kvp.Value;

                foreach (var evidenceRow in evidenceTable)
                {
                    newList.Add(evidenceRow.From);
                    newList.Add(evidenceRow.To);
                }
            }

            newList.Sort(); // sorting the new list

            foreach (var kvp in unmergedEvidenceSet)
            {
                var unmergeEvidenceTableKey = kvp.Key;
                var unmergedEvidenceTable   = kvp.Value;

                if (unmergedEvidenceTable.Count == 0)
                {
                    continue;
                }

                var mergedEvidenceTable = new EvidenceTable(unmergedEvidenceTable.DateTimes);

                for (var i = 0; i < newList.Count - 1; i++)
                {
                    var evidenceRow = new EvidenceRow {
                        From = newList[i], To = newList[i + 1]
                    };

                    // If this is a point feature and no table contains it, then don't add.
                    if (!unmergedEvidenceSet.Contains(evidenceRow) && newList[i] == newList[i + 1])
                    {
                        continue;
                    }

                    // multiple inputs for a single point feature are allowed
                    if (unmergedEvidenceSet.Contains(evidenceRow) && newList[i] == newList[i + 1])
                    {
                        mergedEvidenceTable.Add(evidenceRow);
                    }
                    else
                    {
                        mergedEvidenceTable.AddUnique(evidenceRow);
                    }
                }

                EvidenceRow uniqueRow  = null;
                var         deleteRows = new ObservableCollection <EvidenceRow>();

                foreach (var mergedEvidenceRow in mergedEvidenceTable)
                {
                    if (uniqueRow == null)
                    {
                        uniqueRow = mergedEvidenceRow;
                        continue;
                    }

                    if (mergedEvidenceRow.From == uniqueRow.From && mergedEvidenceRow.To == uniqueRow.To)
                    {
                        deleteRows.Add(mergedEvidenceRow);
                    }
                    else
                    {
                        uniqueRow = mergedEvidenceRow;
                    }
                }

                mergedEvidenceTable.Remove(deleteRows);

                foreach (var mergedEvidenceRow in mergedEvidenceTable)
                {
                    var unmergedEvidenceRows = unmergedEvidenceTable.Where(row => row.Contains(mergedEvidenceRow)).ToList();
                    var columnNames          = mergedEvidenceRow.GetDynamicMemberNames().ToList();

                    if (unmergedEvidenceRows.Count() > 1) // merged section has multiple input values
                    {
                        var avgEvidenceValues = GetEvidenceAverage(unmergedEvidenceRows, network.Vertices[unmergeEvidenceTableKey].States.Count());

                        foreach (var columnName in columnNames)
                        {
                            var evidenceString = avgEvidenceValues[columnName].ValueToDistribution();

                            mergedEvidenceRow[columnName] = network.Vertices[unmergeEvidenceTableKey].States.ParseEvidenceString(evidenceString);
                        }
                    }

                    else
                    {
                        foreach (var columnName in columnNames)
                        {
                            mergedEvidenceRow[columnName] = !unmergedEvidenceRows.Any()
                                                                ? new VertexEvidence {
                                Type = VertexEvidenceType.Null
                            }
                                                                : unmergedEvidenceRows.FirstOrDefault()[columnName];
                        }
                    }
                }

                mergedEvidenceSet.Add(unmergeEvidenceTableKey, mergedEvidenceTable);
            }

            return(mergedEvidenceSet);
        }
Пример #8
0
        private void Plot(EvidenceRow dataRow, string columnName)
        {
            var fillBrush   = new SolidColorBrush(Colors.Goldenrod);
            var strokeBrush = new SolidColorBrush(Colors.Goldenrod);

            var from           = (double)dataRow["From"];
            var to             = (double)dataRow["To"];
            var vertexEvidence = dataRow[columnName] as VertexEvidence;

            if (vertexEvidence == null)
            {
                this.Chart.Annotations.Remove(annotation => ReferenceEquals(annotation.Tag, dataRow));
                return;
            }

            if (vertexEvidence.Type == VertexEvidenceType.Invalid)
            {
                //  MessageBox.Show("Invalid input entered");
                dataRow[columnName] = new VertexEvidence {
                    Type = VertexEvidenceType.Null
                };
                return;
            }
            // Remove older annotations

            this.Chart.Annotations.Remove(annotation => ReferenceEquals(annotation.Tag, dataRow));

            this.Chart.AddNodeStateLines(this.SelectedVertex, this.PipeLineData.BaseTableMax, this.PipeLineData.BaseTableMin, this.VerticalAxis);

            if (selectedTheme == DataTheme.User)
            {
                if (vertexEvidence.Type == VertexEvidenceType.Number)
                {
                    if (from == to)
                    {
                        this.Chart.AddPointAnnotation(dataRow, columnName);
                    }
                    else
                    {
                        this.Chart.AddLineAnnotation(dataRow, columnName);
                    }
                }

                else if (vertexEvidence.Type == VertexEvidenceType.Range)
                {
                    this.Chart.AddRangeAnnotation(dataRow, columnName);
                }

                else if (vertexEvidence.Type == VertexEvidenceType.State)
                {
                    if (from == to)
                    {
                        this.Chart.AddPointAnnotation(dataRow, columnName);
                    }
                    else
                    {
                        this.Chart.AddLineAnnotation(dataRow, columnName);
                    }
                }

                else if (vertexEvidence.Type == VertexEvidenceType.Triangular)
                {
                    this.Chart.AddTriangularDistributionAnnotation(this.SelectedVertex, dataRow, columnName);
                }

                else if (vertexEvidence.Type != VertexEvidenceType.Null)
                {
                    this.Chart.AddInterpolatedDistributionAnnotation(this.SelectedVertex, dataRow, columnName);
                }
            }

            else if (vertexEvidence.Type != VertexEvidenceType.Null)
            {
                this.Chart.AddInterpolatedDistributionAnnotation(this.SelectedVertex, dataRow, columnName);
            }
        }