コード例 #1
0
        public Constraints5LConstraintElement(
            IdIndexElement dIndexElement,
            IrIndexElement rIndexElement,
            IsIndexElement sIndexElement,
            ItIndexElement tIndexElement,
            It t,
            IW W,
            Iδ1 δ1,
            Iδ4 δ4,
            Ix x)
        {
            int LHS = δ1.GetElementAtAsint(
                sIndexElement,
                rIndexElement,
                dIndexElement);

            OPTANO.Modeling.Optimization.Expression RHS = OPTANO.Modeling.Optimization.Expression.Sum(
                t.GetNthElementsAt(
                    tIndexElement.Key,
                    tIndexElement.Key
                    +
                    (δ4.GetElementAtAsint(
                         sIndexElement,
                         rIndexElement,
                         dIndexElement,
                         tIndexElement)
                     - 1)
                    *
                    W.Value.Value.Value,
                    W.Value.Value.Value)
                .Select(
                    y => x.Value[sIndexElement, rIndexElement, y]));

            this.Value = LHS <= RHS;
        }
コード例 #2
0
        public Iδ1ParameterElement Create(
            IsIndexElement sIndexElement,
            IrIndexElement rIndexElement,
            IdIndexElement dIndexElement,
            int value)
        {
            Iδ1ParameterElement parameterElement = null;

            try
            {
                parameterElement = new δ1ParameterElement(
                    sIndexElement,
                    rIndexElement,
                    dIndexElement,
                    value);
            }
            catch (Exception exception)
            {
                this.Log.Error(
                    exception.Message,
                    exception);
            }

            return(parameterElement);
        }
コード例 #3
0
        public IsrdtCrossJoinElement Create(
            IsIndexElement sIndexElement,
            IrIndexElement rIndexElement,
            IdIndexElement dIndexElement,
            ItIndexElement tIndexElement)
        {
            IsrdtCrossJoinElement crossJoinElement = null;

            try
            {
                crossJoinElement = new srdtCrossJoinElement(
                    sIndexElement,
                    rIndexElement,
                    dIndexElement,
                    tIndexElement);
            }
            catch (Exception exception)
            {
                this.Log.Error(
                    exception.Message,
                    exception);
            }

            return(crossJoinElement);
        }
コード例 #4
0
        public IConstraints13LConstraintElement Create(
            IdIndexElement dIndexElement,
            IwIndexElement wIndexElement,
            ITPy y,
            IδMinus δMinus,
            Iμ μ)
        {
            IConstraints13LConstraintElement constraintElement = null;

            try
            {
                constraintElement = new Constraints13LConstraintElement(
                    dIndexElement,
                    wIndexElement,
                    y,
                    δMinus,
                    μ);
            }
            catch (Exception exception)
            {
                this.Log.Error(
                    exception.Message,
                    exception);
            }

            return(constraintElement);
        }
コード例 #5
0
        public IConstraints1ConstraintElement Create(
            IdIndexElement dIndexElement,
            IrIndexElement rIndexElement,
            IsIndexElement sIndexElement,
            It t,
            IW W,
            Iβ β,
            Ix x)
        {
            IConstraints1ConstraintElement constraintElement = null;

            try
            {
                constraintElement = new Constraints1ConstraintElement(
                    dIndexElement,
                    rIndexElement,
                    sIndexElement,
                    t,
                    W,
                    β,
                    x);
            }
            catch (Exception exception)
            {
                this.Log.Error(
                    exception.Message,
                    exception);
            }

            return(constraintElement);
        }
コード例 #6
0
        public IConstraints12ConstraintElement Create(
            IdIndexElement dIndexElement,
            IwIndexElement wIndexElement,
            Id d,
            Il l,
            Ipa pa,
            IP P,
            Iprob prob,
            ITPx x,
            IVariance Variance)
        {
            IConstraints12ConstraintElement constraintElement = null;

            try
            {
                constraintElement = new Constraints12ConstraintElement(
                    dIndexElement,
                    wIndexElement,
                    d,
                    l,
                    pa,
                    P,
                    prob,
                    x,
                    Variance);
            }
            catch (Exception exception)
            {
                this.Log.Error(
                    exception.Message,
                    exception);
            }

            return(constraintElement);
        }
コード例 #7
0
        public IβResultElement Create(
            IsIndexElement sIndexElement,
            IrIndexElement rIndexElement,
            IdIndexElement dIndexElement,
            int value)
        {
            IβResultElement resultElement = null;

            try
            {
                resultElement = new βResultElement(
                    sIndexElement,
                    rIndexElement,
                    dIndexElement,
                    value);
            }
            catch (Exception exception)
            {
                this.Log.Error(
                    exception.Message,
                    exception);
            }

            return(resultElement);
        }
        public IConstraints8UConstraintElement Create(
            IdIndexElement dIndexElement,
            IsIndexElement sIndexElement,
            ItIndexElement tIndexElement,
            Iu u,
            Iz z)
        {
            IConstraints8UConstraintElement constraintElement = null;

            try
            {
                constraintElement = new Constraints8UConstraintElement(
                    dIndexElement,
                    sIndexElement,
                    tIndexElement,
                    u,
                    z);
            }
            catch (Exception exception)
            {
                this.Log.Error(
                    exception.Message,
                    exception);
            }

            return(constraintElement);
        }
コード例 #9
0
        public IConstraints13UConstraintElement Create(
            IdIndexElement dIndexElement,
            IwIndexElement wIndexElement,
            Interfaces.Variables.TP.WardSpareBeds.IδPlus δPlus_w,
            Interfaces.Variables.TP.WardDayBedAvailabilityDeviations.IδPlus δPlus_wd)
        {
            IConstraints13UConstraintElement constraintElement = null;

            try
            {
                constraintElement = new Constraints13UConstraintElement(
                    dIndexElement,
                    wIndexElement,
                    δPlus_w,
                    δPlus_wd);
            }
            catch (Exception exception)
            {
                this.Log.Error(
                    exception.Message,
                    exception);
            }

            return(constraintElement);
        }
コード例 #10
0
        public Iδ4ParameterElement Calculate(
            Iδ4ParameterElementFactory δ4ParameterElementFactory,
            IdIndexElement dIndexElement,
            IrIndexElement rIndexElement,
            IsIndexElement sIndexElement,
            ItIndexElement tIndexElement,
            It t,
            IW W,
            Iγ γ,
            Iδ3 δ3)
        {
            Iδ4ParameterElement δ4ParameterElement = null;

            int γSum = 0;

            int δ3Asint = δ3.GetElementAtAsint(
                sIndexElement,
                rIndexElement,
                dIndexElement);

            if (δ3Asint == 0)
            {
                δ4ParameterElement = δ4ParameterElementFactory.Create(
                    sIndexElement,
                    rIndexElement,
                    dIndexElement,
                    tIndexElement,
                    1);
            }
            else
            {
                int δ4 = 1;

                do
                {
                    γSum = t.GetNthElementsAt(
                        dIndexElement.Value.Value.Value,
                        dIndexElement.Value.Value.Value + (δ4 - 1) * W.Value.Value.Value,
                        W.Value.Value.Value)
                           .Select(x => γ.GetElementAtAsint(
                                       rIndexElement,
                                       t.GetElementAt(x.Key)))
                           .Sum();

                    δ4 = δ4 + 1;
                } while (γSum < δ3Asint);

                if (γSum == δ3Asint)
                {
                    δ4ParameterElement = δ4ParameterElementFactory.Create(
                        sIndexElement,
                        rIndexElement,
                        dIndexElement,
                        tIndexElement,
                        δ4 - 1);     // Subtract 1 to account for last iteration of the do-while loop
                }
            }

            return(δ4ParameterElement);
        }
コード例 #11
0
        public IConstraints3ConstraintElement Create(
            IdIndexElement dIndexElement,
            IwIndexElement wIndexElement,
            Ipa pa,
            IA A,
            IP P,
            ISPx x,
            ISPy y)
        {
            IConstraints3ConstraintElement constraintElement = null;

            try
            {
                constraintElement = new Constraints3ConstraintElement(
                    dIndexElement,
                    wIndexElement,
                    pa,
                    A,
                    P,
                    x,
                    y);
            }
            catch (Exception exception)
            {
                this.Log.Error(
                    exception.Message,
                    exception);
            }

            return(constraintElement);
        }
コード例 #12
0
        public IConstraints14ConstraintElement Create(
            IdIndexElement dIndexElement,
            IwIndexElement wIndexElement,
            Interfaces.Variables.TP.WardBedOccupancyVariances.IVariance Variance_w,
            Interfaces.Variables.TP.WardDayBedRequirementVariances.IVariance Variance_wd)
        {
            IConstraints14ConstraintElement constraintElement = null;

            try
            {
                constraintElement = new Constraints14ConstraintElement(
                    dIndexElement,
                    wIndexElement,
                    Variance_w,
                    Variance_wd);
            }
            catch (Exception exception)
            {
                this.Log.Error(
                    exception.Message,
                    exception);
            }

            return(constraintElement);
        }
コード例 #13
0
        public Constraints3ConstraintElement(
            IdIndexElement dIndexElement,
            IwIndexElement wIndexElement,
            Ipa pa,
            IA A,
            IP P,
            ISPx x,
            ISPy y)
        {
            Expression LHS = Expression.Sum(
                pa.Value
                .Where(
                    i =>
                    P.IsThereElementAt(
                        wIndexElement,
                        i.pIndexElement)
                    &&
                    A.IsThereElementAt(
                        i.pIndexElement,
                        dIndexElement,
                        i.aIndexElement))
                .Select(
                    i => x.Value[i.pIndexElement, i.aIndexElement]));

            Expression RHS = y.Value[wIndexElement];

            this.Value = LHS <= RHS;
        }
コード例 #14
0
        public Iδ3ParameterElement Calculate(
            Iδ3ParameterElementFactory δ3ParameterElementFactory,
            IdIndexElement dIndexElement,
            IrIndexElement rIndexElement,
            IsIndexElement sIndexElement,
            It t,
            IW W,
            Iβ β,
            Iγ γ)
        {
            int value = 0;

            int γSum = t.GetNthElementsAt(
                dIndexElement.Value.Value.Value,
                t.GetT() - W.Value.Value.Value + dIndexElement.Value.Value.Value,
                W.Value.Value.Value)
                       .Select(
                y => γ.GetElementAtAsint(
                    rIndexElement,
                    y))
                       .Sum();

            int βAsint = β.GetElementAtAsint(
                sIndexElement,
                rIndexElement,
                dIndexElement);

            if (βAsint > 0)
            {
                // Case (i)
                if ((γSum % βAsint) == 0)
                {
                    value = γSum / βAsint;
                }
                else if ((γSum % βAsint) != 0)
                {
                    // Case (ii)
                    if (βAsint < (γSum / 2))
                    {
                        value =
                            (int)Math.Floor(
                                (decimal)(γSum / βAsint));
                    }
                    // Case (iii)
                    else if ((βAsint > (γSum / 2)) && (βAsint < γSum))
                    {
                        value =
                            (int)Math.Floor(
                                (decimal)(γSum / (γSum - βAsint)));
                    }
                }
            }

            return(δ3ParameterElementFactory.Create(
                       sIndexElement,
                       rIndexElement,
                       dIndexElement,
                       value));
        }
コード例 #15
0
        public IEBSResultElement Calculate(
            IEBSResultElementFactory EBSResultElementFactory,
            IdIndexElement dIndexElement,
            Iw w,
            IBEDS BEDS,
            Iμ μ,
            IVariance Variance)
        {
            int BEDS_d = BEDS.Value.Value.Value;

            double ExpectedValue_d = w.Value
                                     .Select(y => (double)μ.GetElementAtAsdecimal(
                                                 y,
                                                 dIndexElement))
                                     .Sum();

            double Variance_d = w.Value
                                .Select(y => (double)Variance.GetElementAtAsdecimal(
                                            y,
                                            dIndexElement))
                                .Sum();

            double lowerBound = BEDS_d + 0.5;

            double upperBound = double.PositiveInfinity;

            double value =
                0.5
                *
                (BEDS_d - ExpectedValue_d)
                *
                (MathNet.Numerics.SpecialFunctions.Erf(
                     (lowerBound - ExpectedValue_d)
                     *
                     Math.Pow(Math.Sqrt(2 * Variance_d), -1))
                 -
                 MathNet.Numerics.SpecialFunctions.Erf(
                     (upperBound - ExpectedValue_d)
                     *
                     Math.Pow(Math.Sqrt(2 * Variance_d), -1)))
                +
                Math.Sqrt(Variance_d)
                *
                Math.Pow(Math.Sqrt(2 * Math.PI), -1)
                *
                (Math.Exp(
                     -Math.Pow(lowerBound - ExpectedValue_d, 2)
                     *
                     Math.Pow(2 * Variance_d, -1))
                 -
                 Math.Exp(
                     -Math.Pow(upperBound - ExpectedValue_d, 2)
                     *
                     Math.Pow(2 * Variance_d, -1)));

            return(EBSResultElementFactory.Create(
                       dIndexElement,
                       (decimal)value));
        }
コード例 #16
0
        public sdCrossJoinElement(
            IsIndexElement sIndexElement,
            IdIndexElement dIndexElement)
        {
            this.sIndexElement = sIndexElement;

            this.dIndexElement = dIndexElement;
        }
コード例 #17
0
        public wdCrossJoinElement(
            IwIndexElement wIndexElement,
            IdIndexElement dIndexElement)
        {
            this.wIndexElement = wIndexElement;

            this.dIndexElement = dIndexElement;
        }
コード例 #18
0
        public dtCrossJoinElement(
            IdIndexElement dIndexElement,
            ItIndexElement tIndexElement)
        {
            this.dIndexElement = dIndexElement;

            this.tIndexElement = tIndexElement;
        }
コード例 #19
0
 public decimal GetElementAtAsdecimal(
     IdIndexElement dIndexElement)
 {
     return(this.Value
            .Where(x => x.dIndexElement == dIndexElement)
            .Select(x => x.Value)
            .SingleOrDefault());
 }
        public DayBedRequirementVariancesResultElement(
            IdIndexElement dIndexElement,
            decimal value)
        {
            this.dIndexElement = dIndexElement;

            this.Value = value;
        }
コード例 #21
0
        public EBSResultElement(
            IdIndexElement dIndexElement,
            decimal value)
        {
            this.dIndexElement = dIndexElement;

            this.Value = value;
        }
コード例 #22
0
        public Constraints11ConstraintElement(
            IdIndexElement dIndexElement,
            IwIndexElement wIndexElement,
            Id d,
            Il l,
            Ipa pa,
            IP P,
            Iprob prob,
            ITPx x,
            Iμ μ)
        {
            Expression LHS = μ.Value[wIndexElement, dIndexElement];

            ImmutableList <Tuple <IpIndexElement, IaIndexElement, double> > .Builder builder = ImmutableList.CreateBuilder <Tuple <IpIndexElement, IaIndexElement, double> >();

            foreach (IpIndexElement pIndexElement in pa.Value.Where(i => P.IsThereElementAt(wIndexElement, i.pIndexElement)).Select(w => w.pIndexElement).Distinct())
            {
                foreach (IaIndexElement aIndexElement in pa.Value.Select(w => w.aIndexElement).Distinct())
                {
                    int dLowerBound = aIndexElement.Key <= dIndexElement.Key ? dIndexElement.Key - aIndexElement.Key : d.GetMaximumKey() + dIndexElement.Key - aIndexElement.Key;

                    double RHSSum = 0;

                    for (int w = dLowerBound;
                         w <= l.GetMaximumLengthOfStay();
                         w = w + 1)
                    {
                        RHSSum +=
                            (double)prob.GetElementAtAsdecimal(
                                pIndexElement,
                                l.GetElementAt(
                                    w));
                    }

                    builder.Add(
                        Tuple.Create(
                            pIndexElement,
                            aIndexElement,
                            RHSSum));
                }
            }

            ImmutableList <Tuple <IpIndexElement, IaIndexElement, double> > RHSSums = builder.ToImmutableList();

            Expression RHS = Expression.Sum(
                pa.Value
                .Where(i => P.IsThereElementAt(wIndexElement, i.pIndexElement))
                .Select(
                    y =>
                    RHSSums.Where(w => w.Item1 == y.pIndexElement && w.Item2 == y.aIndexElement).Select(w => w.Item3).SingleOrDefault()
                    *
                    x.Value[
                        y.pIndexElement,
                        y.aIndexElement]));

            this.Value = LHS == RHS;
        }
コード例 #23
0
 public int GetElementAtAsint(
     IsIndexElement sIndexElement,
     IrIndexElement rIndexElement,
     IdIndexElement dIndexElement)
 {
     return(this.Value
            .Where(x => x.sIndexElement == sIndexElement && x.rIndexElement == rIndexElement && x.dIndexElement == dIndexElement)
            .Select(x => x.Value)
            .SingleOrDefault());
 }
コード例 #24
0
        public AParameterElement(
            IpIndexElement pIndexElement,
            IdIndexElement dIndexElement,
            IaIndexElement aIndexElement)
        {
            this.pIndexElement = pIndexElement;

            this.dIndexElement = dIndexElement;

            this.aIndexElement = aIndexElement;
        }
コード例 #25
0
        public δMinusResultElement(
            IwIndexElement wIndexElement,
            IdIndexElement dIndexElement,
            decimal value)
        {
            this.wIndexElement = wIndexElement;

            this.dIndexElement = dIndexElement;

            this.Value = value;
        }
 public IDayBedRequirementVariancesResultElement Calculate(
     IDayBedRequirementVariancesResultElementFactory dayBedRequirementVariancesResultElementFactory,
     IdIndexElement dIndexElement,
     IVariance Variance)
 {
     return(dayBedRequirementVariancesResultElementFactory.Create(
                dIndexElement,
                Variance.Value
                .Where(a => a.dIndexElement == dIndexElement)
                .Select(a => a.Value)
                .Sum()));
 }
コード例 #27
0
        public Constraints13UConstraintElement(
            IdIndexElement dIndexElement,
            IwIndexElement wIndexElement,
            Interfaces.Variables.TP.WardSpareBeds.IδPlus δPlus_w,
            Interfaces.Variables.TP.WardDayBedAvailabilityDeviations.IδPlus δPlus_wd)
        {
            Expression LHS = δPlus_wd.Value[wIndexElement, dIndexElement];

            Expression RHS = δPlus_w.Value[wIndexElement];

            this.Value = LHS <= RHS;
        }
 public IDayBedRequirementMeansResultElement Calculate(
     IDayBedRequirementMeansResultElementFactory dayBedRequirementMeansResultElementFactory,
     IdIndexElement dIndexElement,
     Iμ μ)
 {
     return(dayBedRequirementMeansResultElementFactory.Create(
                dIndexElement,
                μ.Value
                .Where(a => a.dIndexElement == dIndexElement)
                .Select(a => a.Value)
                .Sum()));
 }
コード例 #29
0
        public Constraints8UConstraintElement(
            IdIndexElement dIndexElement,
            IsIndexElement sIndexElement,
            ItIndexElement tIndexElement,
            Iu u,
            Iz z)
        {
            Expression LHS = z.Value[sIndexElement, tIndexElement];

            Expression RHS = u.Value[sIndexElement, dIndexElement];

            this.Value = LHS <= RHS;
        }
コード例 #30
0
        public srdtCrossJoinElement(
            IsIndexElement sIndexElement,
            IrIndexElement rIndexElement,
            IdIndexElement dIndexElement,
            ItIndexElement tIndexElement)
        {
            this.sIndexElement = sIndexElement;

            this.rIndexElement = rIndexElement;

            this.dIndexElement = dIndexElement;

            this.tIndexElement = tIndexElement;
        }