コード例 #1
0
    void sendList(string json)
    {
        modelAssoc = GameObject.Find("ModelAssociation");
        ModelAssociation            modelScr = modelAssoc.GetComponent <ModelAssociation>();
        Dictionary <string, object> resp     = DeserializeJson <Dictionary <string, object> >(json);
        string cid = resp["id"].ToString();

        foreach (Dictionary <string, string> l in assocListToModify)
        {
            print(l);
            if (l["value"].Equals(""))
            {
                l["value"] = "0";
            }
            if (l["assoc_id"] == null)
            {
                modelScr.addCollections(l["value"], l["project_id"], projectName, cid, l["ressource_id"],
                                        l["posX"],
                                        l["posY"]);
            }
            else
            {
                modelScr.updateField(l["assoc_id"], l["value"], l["project_id"], projectName, cid, l["ressource_id"],
                                     l["posX"],
                                     l["posY"]);
            }
        }
        CallDispatcher(json);
    }
コード例 #2
0
        public ResultAssociation Schedule(ModelAssociation currentModelAssoscation, MachineEnvironment currentMachineEnvironment, List <Constraint> currentConstraints,
                                          OptimisationObjective currentOptimisationObjective, DateTime startingWholeProcessingDate)
        {
            // Sort all operations on nearest Due Date first
            List <Operation> AllOperations = SchedulingUtlis.GetAllOperations(currentModelAssoscation.AllBatches);

            AllOperations.Sort((operation1, operation2) => operation1.CurrentBatch.DueDate.CompareTo(operation2.CurrentBatch.DueDate));

            List <OperationMachineAssignment> CurrentOperationMachineAssociations = new List <OperationMachineAssignment>();

            foreach (Operation CurrentOperation in AllOperations)
            {
                // Find next available machine for the processing of current operation
                List <Machine> CapableMachines = CurrentOperation.CapableMachinesWithProcessingTime.Keys.ToList();
                CapableMachines.Sort((machine1, machine2) => machine1.NextAvailableStartProcessingDate.CompareTo(machine2.NextAvailableStartProcessingDate));
                Machine  ChosenMachine       = CapableMachines.First();
                DateTime StartProcessingDate = ChosenMachine.NextAvailableStartProcessingDate;

                // if it isn't the first process on the machine in the scheduling => we have to include setup time
                if (!startingWholeProcessingDate.Equals(StartProcessingDate))
                {
                    SetupForBatch CurrentSetupForBatch = CurrentOperation.SetupTimes
                                                         .Find(setup => setup.CurrentMachine.Equals(ChosenMachine) && setup.PreviousOperation.Index.Equals(ChosenMachine.CurrentlyProcessedOperation.Index));
                    StartProcessingDate = StartProcessingDate.AddSeconds(CurrentSetupForBatch.SetupTime);
                }

                // Calculate processing time
                int NeededProcessingTime = CurrentOperation.CapableMachinesWithProcessingTime[ChosenMachine] * CurrentOperation.CurrentBatch.NumberOfJobs;

                // Include maintenance
                DateTime FinishProcessingDate = StartProcessingDate;
                while (NeededProcessingTime > ChosenMachine.TimeLeftTillMaintenance)
                {
                    // Operation before maintenance
                    FinishProcessingDate = FinishProcessingDate.AddSeconds(ChosenMachine.TimeLeftTillMaintenance);
                    CurrentOperationMachineAssociations.Add
                        (new OperationMachineAssignment(CurrentOperation, ChosenMachine, StartProcessingDate, FinishProcessingDate));
                    NeededProcessingTime -= ChosenMachine.TimeLeftTillMaintenance;
                    StartProcessingDate   = FinishProcessingDate;

                    // Maintenance
                    FinishProcessingDate = StartProcessingDate.AddSeconds(ChosenMachine.TimeOfMaintenance);
                    CurrentOperationMachineAssociations.Add
                        (new OperationMachineAssignment(OperationFactory.generateMaintenance(), ChosenMachine, StartProcessingDate, FinishProcessingDate));
                    ChosenMachine.TimeLeftTillMaintenance = RandomGenerator.MachineTimeLeftTillMaintenanceForSmallScaleProduction();
                    StartProcessingDate = FinishProcessingDate;
                }

                // Operation
                FinishProcessingDate = FinishProcessingDate.AddSeconds(NeededProcessingTime);
                CurrentOperationMachineAssociations.Add(new OperationMachineAssignment(CurrentOperation, ChosenMachine, StartProcessingDate, FinishProcessingDate));
                ChosenMachine.TimeLeftTillMaintenance -= NeededProcessingTime;

                // Update dates for the machine
                ChosenMachine.NextAvailableStartProcessingDate = FinishProcessingDate;
                ChosenMachine.CurrentlyProcessedOperation      = CurrentOperation;
            }
            return(new ResultAssociation(CurrentOperationMachineAssociations, null, null));
        }
コード例 #3
0
        private void LoadModelAssociations(XElement classModel)
        {
            ModelAssociations.Clear();
            IEnumerable <XElement> modelAssociations = classModel.Elements("Association");

            foreach (XElement modelAssociation in modelAssociations)
            {
                var ma = new ModelAssociation();

                var    name = modelAssociation.Attribute("name");
                string modelAssociationName = name != null ? name.Value : "";
                ma.Name = modelAssociationName;

                var    desc        = modelAssociation.Attribute("description");
                string description = desc != null ? desc.Value : "";
                ma.Description = description;

                XElement endA = modelAssociation.Element("EndA");
                if (endA != null)
                {
                    XAttribute xEndATarget       = endA.Attribute("target");
                    string     endATarget        = xEndATarget != null ? xEndATarget.Value : "";
                    XAttribute xEndAMultiplicity = endA.Attribute("multiplicity");
                    string     endAMultiplicity  = xEndAMultiplicity != null ? xEndAMultiplicity.Value : "";
                    XAttribute xEndARole         = endA.Attribute("role");
                    string     endARole          = xEndARole != null ? xEndARole.Value : "";

                    ma.Members.Add(new AssociationMember {
                        ClassName = endATarget, Multiplicity = endAMultiplicity, Role = endARole
                    });
                }

                XElement endB = modelAssociation.Element("EndB");
                if (endB != null)
                {
                    XAttribute xEndBTarget       = endB.Attribute("target");
                    string     endBTarget        = xEndBTarget != null ? xEndBTarget.Value : "";
                    XAttribute xEndBMultiplicity = endB.Attribute("multiplicity");
                    string     endBMultiplicity  = xEndBMultiplicity != null ? xEndBMultiplicity.Value : "";
                    XAttribute xEndBRole         = endB.Attribute("role");
                    string     endBRole          = xEndBRole != null ? xEndBRole.Value : "";

                    ma.Members.Add(new AssociationMember {
                        ClassName = endBTarget, Multiplicity = endBMultiplicity, Role = endBRole
                    });
                }

                ModelAssociations.Add(ma);
            }
        }
コード例 #4
0
        public AddDataBlockViewModel(ModelAssociation targetAssociation, ModelClass targetClass)
        {
            TargetAssociation = targetAssociation;
            TargetClass       = targetClass;
            string multiplicity = targetAssociation.Members.FirstOrDefault(m => m.ClassName.Equals(targetClass.Name)).Multiplicity;

            SheetBlock = new Model.SheetBlock()
            {
                Type = multiplicity.Equals("1") ? "single" : "input"
            };
            TypeString        = SheetBlock.Type;
            AssociationString = string.Format("{0} {1} {2} {3}", TargetAssociation.Members[0].ClassName,
                                              TargetAssociation.Members[0].Multiplicity, TargetAssociation.Members[1].Multiplicity, TargetAssociation.Members[1].ClassName);
        }
コード例 #5
0
 // Start is called before the first frame update
 void Start()
 {
     canvas     = GameObject.Find("Canvas").GetComponent <Canvas>();
     modelScr   = GameObject.Find("ModelAssociation").GetComponent <ModelAssociation>();
     objectList = new List <GameObject>();
     card       = GameObject.Find("CardVisualeEditable");
     trash      = GameObject.Find("EditTrash");
     objectList.Add(card);
     objectList.Add(trash);
     dragged     = false;
     name        = "";
     cardSize    = card.GetComponent <RectTransform>().sizeDelta *canvas.scaleFactor;
     ressSize    = gameObject.GetComponent <RectTransform>().sizeDelta *canvas.scaleFactor;
     validateBtn = GameObject.Find("Validate");
 }
コード例 #6
0
        /// <summary>
        ///     Translate model Association into view Association (creates a view Association if not yet created)
        /// </summary>
        /// <param name="viewModel"></param>
        /// <param name="association"></param>
        /// <returns></returns>
        private static ViewModelAssociation TranslateAssociation(
            EntityDesignerViewModel viewModel,
            ModelAssociation association)
        {
            var ends = association.AssociationEnds();

            var end1 = ends[0];
            var end2 = ends[1];

            if (end1.Type.Status == BindingStatus.Known &&
                end2.Type.Status == BindingStatus.Known)
            {
                var viewEnd1 =
                    ModelToDesignerModelXRef.GetExisting(viewModel.EditingContext, end1.Type.Target, viewModel.Partition) as
                    ViewModelEntityType;
                var viewEnd2 =
                    ModelToDesignerModelXRef.GetExisting(viewModel.EditingContext, end2.Type.Target, viewModel.Partition) as
                    ViewModelEntityType;

                // Only create association if both entityType exist.
                if (viewEnd1 != null &&
                    viewEnd2 != null)
                {
                    var viewAssoc =
                        ModelToDesignerModelXRef.GetNewOrExisting(viewModel.EditingContext, association, viewEnd1, viewEnd2) as
                        ViewModelAssociation;
                    viewAssoc.Name = association.LocalName.Value;

                    viewAssoc.SourceMultiplicity = end1.Multiplicity.Value;

                    viewAssoc.TargetMultiplicity = end2.Multiplicity.Value;

                    // There could be a situation where association is created after navigation property (for example: the user add an entity-type and then add related types ).
                    // In that case we need to make sure that view's association and navigation property are linked.
                    Debug.Assert(
                        end1.Type.Target != null, "Association End: " + end1.DisplayName + " does not reference a valid entity-type.");
                    if (end1.Type.Target != null)
                    {
                        var modelSourceNavigationProperty =
                            ModelHelper.FindNavigationPropertyForAssociationEnd(end1.Type.Target as ConceptualEntityType, end1);
                        if (modelSourceNavigationProperty != null)
                        {
                            var viewSourceNavigationProperty =
                                ModelToDesignerModelXRef.GetExisting(
                                    viewModel.EditingContext, modelSourceNavigationProperty, viewModel.Partition) as
                                ViewModelNavigationProperty;
                            if (viewSourceNavigationProperty != null)
                            {
                                viewAssoc.SourceNavigationProperty       = viewSourceNavigationProperty;
                                viewSourceNavigationProperty.Association = viewAssoc;
                            }
                        }
                    }

                    Debug.Assert(
                        end2.Type.Target != null, "Association End: " + end2.DisplayName + " does not reference a valid entity-type.");
                    if (end2.Type.Target != null)
                    {
                        var modelTargetNavigatioNProperty =
                            ModelHelper.FindNavigationPropertyForAssociationEnd(end2.Type.Target as ConceptualEntityType, end2);
                        if (modelTargetNavigatioNProperty != null)
                        {
                            var viewTargetNavigationProperty =
                                ModelToDesignerModelXRef.GetExisting(
                                    viewModel.EditingContext, modelTargetNavigatioNProperty, viewModel.Partition) as
                                ViewModelNavigationProperty;
                            if (viewTargetNavigationProperty != null)
                            {
                                viewAssoc.TargetNavigationProperty       = viewTargetNavigationProperty;
                                viewTargetNavigationProperty.Association = viewAssoc;
                            }
                        }
                    }

                    return(viewAssoc);
                }
            }
            return(null);
        }
        /// <summary>
        ///     Translate model Association into view Association (creates a view Association if not yet created)
        /// </summary>
        /// <param name="viewModel"></param>
        /// <param name="association"></param>
        /// <returns></returns>
        private static ViewModelAssociation TranslateAssociation(
            EntityDesignerViewModel viewModel,
            ModelAssociation association)
        {
            var ends = association.AssociationEnds();

            var end1 = ends[0];
            var end2 = ends[1];

            if (end1.Type.Status == BindingStatus.Known
                && end2.Type.Status == BindingStatus.Known)
            {
                var viewEnd1 =
                    ModelToDesignerModelXRef.GetExisting(viewModel.EditingContext, end1.Type.Target, viewModel.Partition) as
                    ViewModelEntityType;
                var viewEnd2 =
                    ModelToDesignerModelXRef.GetExisting(viewModel.EditingContext, end2.Type.Target, viewModel.Partition) as
                    ViewModelEntityType;

                // Only create association if both entityType exist.
                if (viewEnd1 != null
                    && viewEnd2 != null)
                {
                    var viewAssoc =
                        ModelToDesignerModelXRef.GetNewOrExisting(viewModel.EditingContext, association, viewEnd1, viewEnd2) as
                        ViewModelAssociation;
                    viewAssoc.Name = association.LocalName.Value;

                    viewAssoc.SourceMultiplicity = end1.Multiplicity.Value;

                    viewAssoc.TargetMultiplicity = end2.Multiplicity.Value;

                    // There could be a situation where association is created after navigation property (for example: the user add an entity-type and then add related types ).
                    // In that case we need to make sure that view's association and navigation property are linked.
                    Debug.Assert(
                        end1.Type.Target != null, "Association End: " + end1.DisplayName + " does not reference a valid entity-type.");
                    if (end1.Type.Target != null)
                    {
                        var modelSourceNavigationProperty =
                            ModelHelper.FindNavigationPropertyForAssociationEnd(end1.Type.Target as ConceptualEntityType, end1);
                        if (modelSourceNavigationProperty != null)
                        {
                            var viewSourceNavigationProperty =
                                ModelToDesignerModelXRef.GetExisting(
                                    viewModel.EditingContext, modelSourceNavigationProperty, viewModel.Partition) as
                                ViewModelNavigationProperty;
                            if (viewSourceNavigationProperty != null)
                            {
                                viewAssoc.SourceNavigationProperty = viewSourceNavigationProperty;
                                viewSourceNavigationProperty.Association = viewAssoc;
                            }
                        }
                    }

                    Debug.Assert(
                        end2.Type.Target != null, "Association End: " + end2.DisplayName + " does not reference a valid entity-type.");
                    if (end2.Type.Target != null)
                    {
                        var modelTargetNavigatioNProperty =
                            ModelHelper.FindNavigationPropertyForAssociationEnd(end2.Type.Target as ConceptualEntityType, end2);
                        if (modelTargetNavigatioNProperty != null)
                        {
                            var viewTargetNavigationProperty =
                                ModelToDesignerModelXRef.GetExisting(
                                    viewModel.EditingContext, modelTargetNavigatioNProperty, viewModel.Partition) as
                                ViewModelNavigationProperty;
                            if (viewTargetNavigationProperty != null)
                            {
                                viewAssoc.TargetNavigationProperty = viewTargetNavigationProperty;
                                viewTargetNavigationProperty.Association = viewAssoc;
                            }
                        }
                    }

                    return viewAssoc;
                }
            }
            return null;
        }
コード例 #8
0
 public ResultAssociation Schedule(ModelAssociation CurrentModel, MachineEnvironment CurrentMachineEnvironment, List <Constraint> CurrentConstraints, OptimisationObjective CurrentOptimisationObjective, DateTime startingWholeProcessingDate)
 {
     throw new NotImplementedException();
 }
コード例 #9
0
        public ResultAssociation Schedule(ModelAssociation currentModelAssoscation, MachineEnvironment currentMachineEnvironment, List <Constraint> currentConstraints,
                                          OptimisationObjective currentOptimisationObjective, DateTime startingWholeProcessingDate)
        {
            // Sort all batches on nearest Due Date first
            List <Batch> AllBatches = currentModelAssoscation.AllBatches;

            AllBatches.Sort((batch1, batch2) => batch1.DueDate.CompareTo(batch2.DueDate));

            List <OperationMachineAssignment> CurrentOperationMachineAssociations = new List <OperationMachineAssignment>();

            foreach (Batch CurrentBatch in AllBatches)
            {
                List <Operation> CurrentOperations = CurrentBatch.JobInBatch.ListOfOperations;
                foreach (Operation CurrentOperation in CurrentOperations)
                {
                    // First operation in Job will start immidiatelly
                    if (CurrentOperation.ReleaseDate.Equals(DateTime.MaxValue))
                    {
                        CurrentOperation.ReleaseDate = startingWholeProcessingDate;
                    }

                    // Find next available machine for the processing of current operation
                    List <Machine> CapableMachines = CurrentOperation.CapableMachinesWithProcessingTime.Keys.ToList();
                    CapableMachines.Sort((machine1, machine2) => machine1.NextAvailableStartProcessingDate.CompareTo(machine2.NextAvailableStartProcessingDate));
                    Machine  ChosenMachine       = CapableMachines.First();
                    DateTime StartProcessingDate = CurrentOperation.ReleaseDate;

                    // if it isn't the first process on the machine in the scheduling => we have to include setup time
                    SetupForBatch CurrentSetupForBatch = CurrentOperation.SetupTimes
                                                         .Find(setup => setup.CurrentMachine.Equals(ChosenMachine) &&
                                                               ChosenMachine.CurrentlyProcessedOperation != null &&
                                                               setup.PreviousOperation.Index.Equals(ChosenMachine.CurrentlyProcessedOperation.Index));

                    // If the machine wasn't able to be setup after previous job -> add setup time
                    if (CurrentSetupForBatch != null && StartProcessingDate.CompareTo(ChosenMachine.NextAvailableStartProcessingDate.AddSeconds(CurrentSetupForBatch.SetupTime)) < 0)
                    {
                        StartProcessingDate = ChosenMachine.NextAvailableStartProcessingDate.AddSeconds(CurrentSetupForBatch.SetupTime);
                    }
                    else
                    {
                        Console.WriteLine("Now " + ChosenMachine.Name + StartProcessingDate);
                    }


                    // Calculate processing time
                    int NeededProcessingTime = CurrentOperation.CapableMachinesWithProcessingTime[ChosenMachine] * CurrentOperation.CurrentBatch.NumberOfJobs;

                    // Include maintenance
                    DateTime FinishProcessingDate = StartProcessingDate;
                    while (NeededProcessingTime > ChosenMachine.TimeLeftTillMaintenance)
                    {
                        // Operation before maintenance
                        FinishProcessingDate = FinishProcessingDate.AddSeconds(ChosenMachine.TimeLeftTillMaintenance);
                        CurrentOperationMachineAssociations.Add
                            (new OperationMachineAssignment(CurrentOperation, ChosenMachine, StartProcessingDate, FinishProcessingDate));
                        NeededProcessingTime -= ChosenMachine.TimeLeftTillMaintenance;
                        StartProcessingDate   = FinishProcessingDate;

                        // Maintenance
                        FinishProcessingDate = StartProcessingDate.AddSeconds(ChosenMachine.TimeOfMaintenance);
                        CurrentOperationMachineAssociations.Add
                            (new OperationMachineAssignment(OperationFactory.generateMaintenance(), ChosenMachine, StartProcessingDate, FinishProcessingDate));
                        ChosenMachine.ResetTimeLeftTillMaintenanceWithAgingEffect();
                        StartProcessingDate = FinishProcessingDate;
                    }

                    // Operation
                    FinishProcessingDate = FinishProcessingDate.AddSeconds(NeededProcessingTime);
                    CurrentOperationMachineAssociations.Add(new OperationMachineAssignment(CurrentOperation, ChosenMachine, StartProcessingDate, FinishProcessingDate));
                    ChosenMachine.TimeLeftTillMaintenance -= NeededProcessingTime;

                    // Update dates for the machine
                    ChosenMachine.NextAvailableStartProcessingDate = FinishProcessingDate;
                    ChosenMachine.CurrentlyProcessedOperation      = CurrentOperation;

                    // Next operation can start after previous one in the same job
                    if (CurrentOperation.CurrentJob.GetNextOperation(CurrentOperation) != null)
                    {
                        CurrentOperation.CurrentJob.GetNextOperation(CurrentOperation).ReleaseDate = FinishProcessingDate;
                    }
                }
            }
            return(new ResultAssociation(CurrentOperationMachineAssociations, null, null));
        }