Exemplo n.º 1
0
        private IEnumerable <SingletonVariableLabelModel> ExtractSingletonLabelsFrom(SnapshotLabelAssignment assignment, ConstraintNetwork constraintNetwork)
        {
            var labelAccumulator = new List <SingletonVariableLabelModel>();

            foreach (var variable in constraintNetwork.GetSingletonVariables())
            {
                var solverVariable      = _modelSolverMap.GetSolverSingletonVariableByName(variable.Name);
                var labelAssignment     = assignment.GetAssignmentFor(solverVariable);
                var variableSolverValue = labelAssignment.Value;
                var variableModel       = _modelSolverMap.GetModelSingletonVariableByName(variable.Name);
                var variableModelValue  = ConvertSolverValueToModel(variableModel, variableSolverValue);
                var label = new SingletonVariableLabelModel(variableModel, new ValueModel(variableModelValue));
                labelAccumulator.Add(label);
            }

            return(labelAccumulator);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Is the value arc consistent.
        /// </summary>
        /// <param name="value">Value.</param>
        /// <param name="assignment">Current variable label assignments.</param>
        /// <returns>True if arc consistent, False if not arc consistent.</returns>
        private bool IsConsistent(Value value, SnapshotLabelAssignment assignment)
        {
            var variable = value.Variable;

            // Has the variable been assigned a value? If it has not, then the value must be consistent
            if (!assignment.IsAssigned(variable))
            {
                return(true);
            }

            var labelAssignment = assignment.GetAssignmentFor(variable);

            /*
             * The variable has been assigned a value, it is consistent if the
             * value is the same as the assigned value.
             */
            return(labelAssignment.Value == value.Content);
        }
Exemplo n.º 3
0
        private BucketLabelModel ExtractBucketLabelFrom(SnapshotLabelAssignment assignment, OrangeBucketVariableMap bucketVariableMap)
        {
            var bundleLabels = new List <BundleLabelModel>();

            foreach (var bundleMap in bucketVariableMap.GetBundleMaps())
            {
                var variableLabels = new List <SingletonVariableLabelModel>();
                foreach (var variableMap in bundleMap.GetVariableMaps())
                {
                    var solverVariable      = variableMap.SolverVariable;
                    var labelAssignment     = assignment.GetAssignmentFor(solverVariable);
                    var variableSolverValue = labelAssignment.Value;
                    var variableModel       = variableMap.ModelVariable;
                    var variableModelValue  = ConvertSolverValueToModel(bucketVariableMap.Bucket, variableSolverValue);
                    var label = new SingletonVariableLabelModel(variableModel, new ValueModel(variableModelValue));
                    variableLabels.Add(label);
                }
                bundleLabels.Add(new BundleLabelModel(bucketVariableMap.Bucket.Bundle, variableLabels));
            }

            return(new BucketLabelModel(bucketVariableMap.Bucket, bundleLabels));
        }
Exemplo n.º 4
0
        private IEnumerable <AggregateVariableLabelModel> ExtractAggregateLabelsFrom(SnapshotLabelAssignment assignment, ConstraintNetwork constraintNetwork)
        {
            var aggregatorLabelAccumulator = new List <AggregateVariableLabelModel>();

            foreach (var aggregateSolverVariable in constraintNetwork.GetAggregateVariables())
            {
                var internalAccumulator    = new List <ValueModel>();
                var aggregateVariableModel = _modelSolverMap.GetModelAggregateVariableByName(aggregateSolverVariable.Name);
                foreach (var variable in aggregateSolverVariable.Variables)
                {
                    var solverVariable      = _modelSolverMap.GetSolverVariableByName(variable.Name);
                    var labelAssignment     = assignment.GetAssignmentFor(solverVariable);
                    var variableSolverValue = labelAssignment.Value;
                    var variableModel       = _modelSolverMap.GetInternalModelAggregateVariableByName(variable.Name);
                    var variableModelValue  = ConvertSolverValueToModel((SingletonVariableModel)variableModel, variableSolverValue);
                    internalAccumulator.Add(new ValueModel(variableModelValue));
                }

                var label = new AggregateVariableLabelModel(aggregateVariableModel, internalAccumulator);
                aggregatorLabelAccumulator.Add(label);
            }

            return(aggregatorLabelAccumulator);
        }