コード例 #1
0
        public void GenerateOperations(List <Dictionary <long, Node> > nodesPerLevel, TransitionMatrix transitionMatrix,
                                       TransitionMatrixInput inputTransitionMatrix, MasterTableResourceCapability resourceCapabilities, XRandom rng)
        {
            Prepare(transitionMatrix, inputTransitionMatrix, rng);

            List <TEnumerator <M_ResourceCapability> > tools = resourceCapabilities.ParentCapabilities.Select(x =>
                                                                                                              new TEnumerator <M_ResourceCapability>(x.ChildResourceCapabilities.ToArray())).ToList();

            for (var i = 0; i < nodesPerLevel.Count - 1; i++)
            {
                foreach (var article in nodesPerLevel[i].Values)
                {
                    var hierarchyNumber       = 0;
                    var currentWorkingMachine = inputTransitionMatrix.ExtendedTransitionMatrix
                        ? DetermineNextWorkingMachine(0, rng)
                        : rng.Next(tools.Count);
                    var lastOperationReached = false;
                    var operationCount       = 0;
                    var correction           = inputTransitionMatrix.ExtendedTransitionMatrix ? 1 : 0;



                    do
                    {
                        int duration;
                        do
                        {
                            duration = _machiningTimeDistributions[currentWorkingMachine].Sample();
                        } while (duration == 0);


                        hierarchyNumber += 10;
                        var operation = new M_Operation
                        {
                            ArticleId            = article.Article.Id,
                            Name                 = "Operation " + (operationCount + 1) + " for [" + article.Article.Name + "]",
                            Duration             = duration,
                            ResourceCapabilityId = tools[currentWorkingMachine].GetNext().Id,
                            HierarchyNumber      = hierarchyNumber
                        };
                        article.Operations.Add(new Operation {
                            MOperation = operation
                        });

                        currentWorkingMachine = DetermineNextWorkingMachine(currentWorkingMachine + correction, rng);
                        operationCount++;
                        if (inputTransitionMatrix.ExtendedTransitionMatrix)
                        {
                            lastOperationReached = _matrixSize == currentWorkingMachine + 1;
                        }
                        else
                        {
                            lastOperationReached = article.WorkPlanLength == operationCount;
                        }
                    } while (!lastOperationReached);
                }
            }
        }
コード例 #2
0
        public void VerifyGeneratedData(TransitionMatrix transitionMatrix, List <Dictionary <long, Node> > nodesPerLevel,
                                        MasterTableResourceCapability capabilities)
        {
            var actualTransitionMatrix = new TransitionMatrix
            {
                Pi = new double[capabilities.ParentCapabilities.Count + 1, capabilities.ParentCapabilities.Count + 1]
            };

            for (var i = 0; i < nodesPerLevel.Count - 1; i++)
            {
                foreach (var article in nodesPerLevel[i].Values)
                {
                    var operationCount = 0;
                    var lastCapPos     = 0;
                    do
                    {
                        var capPos = capabilities.ParentCapabilities.FindIndex(x =>
                                                                               object.ReferenceEquals(x,
                                                                                                      article.Operations[operationCount].MOperation.ResourceCapability.ParentResourceCapability));
                        actualTransitionMatrix.Pi[lastCapPos, capPos]++;
                        lastCapPos = capPos + 1;
                        operationCount++;
                    } while (operationCount < article.Operations.Count);

                    actualTransitionMatrix.Pi[lastCapPos, capabilities.ParentCapabilities.Count]++;
                }
            }

            for (var i = 0; i <= capabilities.ParentCapabilities.Count; i++)
            {
                var sum = 0.0;
                for (var j = 0; j <= capabilities.ParentCapabilities.Count; j++)
                {
                    sum += actualTransitionMatrix.Pi[i, j];
                }

                for (var j = 0; j <= capabilities.ParentCapabilities.Count; j++)
                {
                    actualTransitionMatrix.Pi[i, j] /= sum;
                }
            }

            var transitionMatrixGenerator = new TransitionMatrixGenerator();

            ActualOrganizationDegree = transitionMatrixGenerator.CalcOrganizationDegree(actualTransitionMatrix.Pi,
                                                                                        capabilities.ParentCapabilities.Count + 1);
            GeneratedOrganizationDegree = transitionMatrixGenerator.CalcOrganizationDegree(transitionMatrix.Pi,
                                                                                           capabilities.ParentCapabilities.Count + 1);

            System.Diagnostics.Debug.WriteLine("################################# Generated work plans have an organization degree of " + ActualOrganizationDegree + " (transition matrix has " + GeneratedOrganizationDegree + ")");
        }
コード例 #3
0
        public static MasterTableResourceCapability Initialize(MasterDBContext context, List <ResourceProperty> resourceProperties)
        {
            var resourceCapabilities = new MasterTableResourceCapability();

            resourceCapabilities.CreateCapabilities(context, resourceProperties);

            var resources = new MasterTableResource(resourceCapabilities);

            resources.CreateModel(resourceProperties);
            resources.CreateResourceTools(resourceProperties);

            resources.SaveToDB(context);
            return(resourceCapabilities);
        }
コード例 #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="context">Database context, the results are written to</param>
        /// <param name="resourceModelSize">Determines the number of resources for reach resource group </param>
        /// <param name="setupModelSize">Determines the number of possible setups for each resource group </param>
        /// <param name="operatorsModelSize">Add Operator that is required for setup</param>
        /// <param name="numberOfWorkersForProcessing">Add a required resource for Processing</param>
        /// <param name="secondResource">Add a second primary resource that is required for setup and processing</param>
        /// <returns></returns>
        public static MasterTableResourceCapability MasterTableResourceCapability(MasterDBContext context,
                                                                                  ModelSize resourceModelSize, ModelSize setupModelSize, ModelSize operatorsModelSize,
                                                                                  int numberOfWorkersForProcessing = 0, bool secondResource = false)
        {
            // requires Tools and Resources
            var resourceCapabilities = new MasterTableResourceCapability();

            resourceCapabilities.InitBasicCapabilities(context);
            switch (setupModelSize)
            {
            case ModelSize.Small:
                resourceCapabilities.CreateToolingCapabilities(context, 2, 2, 2);
                break;

            case ModelSize.Medium:
                resourceCapabilities.CreateToolingCapabilities(context, 4, 4, 7);
                break;

            case ModelSize.Large:
                resourceCapabilities.CreateToolingCapabilities(context, 8, 8, 14);
                break;

            case ModelSize.TestModel:
                resourceCapabilities.CreateToolingCapabilities(context, 4, 4, 7);
                break;

            default: throw new ArgumentException();
            }

            var resources = new MasterTableResource(resourceCapabilities);

            switch (resourceModelSize)
            {
            case ModelSize.Small:
                resources.InitSmall(context);
                break;

            case ModelSize.Medium:
                resources.InitMedium(context);

                break;

            case ModelSize.Large:
                resources.InitLarge(context);
                break;

            case ModelSize.XLarge:
                resources.InitXLarge(context);
                break;

            case ModelSize.TestModel:
                resources.InitMediumTest(context);
                break;

            default: throw new ArgumentException();
            }

            var operatorModel = new int[] { 0, 0, 0 };

            switch (operatorsModelSize)
            {
            case ModelSize.None:
                operatorModel = new int[] { 0, 0, 0 };
                break;

            case ModelSize.Small:
                operatorModel = new int[] { 1, 0, 1 };
                break;

            case ModelSize.Medium:
                operatorModel = new int[] { 1, 1, 1 };
                break;

            default: throw new ArgumentException();
            }

            resources.CreateResourceTools(setupTimeCutting: 10, setupTimeDrilling: 15, setupTimeAssembling: 20, operatorModel,
                                          numberOfWorkers: numberOfWorkersForProcessing, secondResource);
            resources.SaveToDB(context);
            return(resourceCapabilities);
        }
コード例 #5
0
        internal OperationData(ArticleData articles, MasterTableResourceCapability resourceCapability)
        {
            SawTools = new TEnumerator <M_ResourceCapability>(
                obj: resourceCapability.Capabilities.Single(x => x.Name.Equals(resourceCapability.CUTTING.Name))
                .ChildResourceCapabilities.ToArray());

            DrillTools = new TEnumerator <M_ResourceCapability>(
                obj: resourceCapability.Capabilities.Single(x => x.Name.Equals(resourceCapability.DRILLING.Name))
                .ChildResourceCapabilities.ToArray());

            AssemblyTools = new TEnumerator <M_ResourceCapability>(
                obj: resourceCapability.Capabilities.Single(x => x.Name.Equals(resourceCapability.ASSEMBLING.Name))
                .ChildResourceCapabilities.ToArray());

            BODENPLATTE_BOHREN = new M_Operation
            {
                ArticleId            = articles.BODENPLATTE.Id,
                Name                 = "Bodenplatte bohren",
                Duration             = 5,
                ResourceCapabilityId = DrillTools.GetNext().Id,
                HierarchyNumber      = 10
            };

            BODENPLATTE_ZUSAMMENBAUEN = new M_Operation
            {
                ArticleId            = articles.BODENPLATTE.Id,
                Name                 = "Bodenplatte zusammenbauen",
                Duration             = 5,
                ResourceCapabilityId = AssemblyTools.GetNext().Id,
                HierarchyNumber      = 20
            };

            ABLAGE_ZUSAMMENBAUEN = new M_Operation
            {
                ArticleId            = articles.ABLAGE.Id,
                Name                 = "Ablage zusammenbauen",
                Duration             = 1,
                ResourceCapabilityId = AssemblyTools.GetNext().Id,
                HierarchyNumber      = 10
            };

            DECKPLATTE_BOHREN = new M_Operation
            {
                ArticleId            = articles.DECKPLATTE.Id,
                Name                 = "Deckplatte bohren",
                Duration             = 5,
                ResourceCapabilityId = DrillTools.GetNext().Id,
                HierarchyNumber      = 10
            };

            SEITENWAND_BOHREN = new M_Operation
            {
                ArticleId            = articles.SEITENWAND.Id,
                Name                 = "Seitenwand bohren",
                Duration             = 5,
                ResourceCapabilityId = DrillTools.GetNext().Id,
                HierarchyNumber      = 10
            };

            RÜCKWAND_ZUSAMMENBAUEN = new M_Operation
            {
                ArticleId            = articles.RÜCKWAND.Id,
                Name                 = "Rückwand zusammenbauen",
                Duration             = 1,
                ResourceCapabilityId = AssemblyTools.GetNext().Id,
                HierarchyNumber      = 10
            };

            SCHRANKTÜR_BOHREN = new M_Operation
            {
                ArticleId            = articles.SCHRANKTÜR.Id,
                Name                 = "Schranktür bohren",
                Duration             = 5,
                ResourceCapabilityId = DrillTools.GetNext().Id,
                HierarchyNumber      = 10
            };

            SCHRANKTÜR_ZUSAMMENBAUEN = new M_Operation
            {
                ArticleId            = articles.SCHRANKTÜR.Id,
                Name                 = "Schranktür zusammenbauen",
                Duration             = 10,
                ResourceCapabilityId = AssemblyTools.GetNext().Id,
                HierarchyNumber      = 20
            };

            RAHMEN_ZUSAMMENBAUEN = new M_Operation
            {
                ArticleId            = articles.RAHMEN.Id,
                Name                 = "Rahmen zusammenbauen",
                Duration             = 10,
                ResourceCapabilityId = AssemblyTools.GetNext().Id,
                HierarchyNumber      = 10
            };

            RÜCKWAND_MONTIEREN = new M_Operation
            {
                ArticleId            = articles.RAHMEN_MIT_RÜCKWAND.Id,
                Name                 = "Rückenwand montieren",
                Duration             = 20,
                ResourceCapabilityId = AssemblyTools.GetNext().Id,
                HierarchyNumber      = 10
            };

            REGAL_DÜBEL_ANBRINGEN = new M_Operation
            {
                ArticleId            = articles.REGAL.Id,
                Name                 = "Regal: Dübel anbringen",
                Duration             = 5,
                ResourceCapabilityId = AssemblyTools.GetNext().Id,
                HierarchyNumber      = 10
            };

            REGAL_ABLAGEN_EINBAUEN = new M_Operation
            {
                ArticleId            = articles.REGAL.Id,
                Name                 = "Regal: Ablagen einbauen",
                Duration             = 5,
                ResourceCapabilityId = AssemblyTools.GetNext().Id,
                HierarchyNumber      = 20
            };

            SCHRANK_KLEIDERSTANGENHALTERUNGEN_ANBRINGEN = new M_Operation
            {
                ArticleId            = articles.SCHRANK.Id,
                Name                 = "Schrank: Kleiderstangenhalterungen anbringen",
                Duration             = 5,
                ResourceCapabilityId = AssemblyTools.GetNext().Id,
                HierarchyNumber      = 10
            };

            SCHRANK_KLEIDERSTANGE_EINBAUEN = new M_Operation
            {
                ArticleId            = articles.SCHRANK.Id,
                Name                 = "Schrank: Kleiderstange einbauen",
                Duration             = 2,
                ResourceCapabilityId = AssemblyTools.GetNext().Id,
                HierarchyNumber      = 20
            };

            SCHRANKTÜR_BEFESTIGEN = new M_Operation
            {
                ArticleId            = articles.SCHRANK.Id,
                Name                 = "Schrank: Tür befestigen",
                Duration             = 10,
                ResourceCapabilityId = AssemblyTools.GetNext().Id,
                HierarchyNumber      = 30
            };
        }