Ejemplo n.º 1
0
        private IIntRange[] GetXIndexRanges(double firstMz, int xArrayLength, List <IIntRange> flightTimeBinRanges)
        {
            IIntRange[] xIdxRanges = new IIntRange[flightTimeBinRanges.Count];
            m_reader.FileUnitConverter.Convert(MidacUnits.MassToCharge, MidacUnits.FlightTimeBinIndex, ref firstMz);
            int firstMzFtBin = (int)Math.Round(firstMz);

            for (int i = 0; i < flightTimeBinRanges.Count; i++)
            {
                int minIdx = flightTimeBinRanges[i].Min - firstMzFtBin;
                int maxIdx = flightTimeBinRanges[i].Max - firstMzFtBin;
                if (minIdx < 0)
                {
                    minIdx = 0;
                }
                if (maxIdx >= xArrayLength)
                {
                    maxIdx = xArrayLength - 1;
                }
                xIdxRanges[i] = new IntRange(minIdx, maxIdx);
            }
            return(xIdxRanges);
        }
Ejemplo n.º 2
0
        static int Main(string[] args)
        {
            int          status  = 127;
            const string DATADIR = "../..";
            const double RC_EPS  = 0.000001;

            try
            {
                OplFactory.DebugMode = true;
                OplFactory      oplF       = new OplFactory();
                OplErrorHandler errHandler = oplF.CreateOplErrorHandler();
                OplSettings     settings   = oplF.CreateOplSettings(errHandler);
                // Make master model
                Cplex masterCplex = oplF.CreateCplex();
                masterCplex.SetOut(null);

                OplRunConfiguration masterRC0 = oplF.CreateOplRunConfiguration(DATADIR + "/cutstock.mod", DATADIR + "/cutstock.dat");
                masterRC0.Cplex = masterCplex;
                OplDataElements masterDataElements = masterRC0.OplModel.MakeDataElements();

                // prepare sub model source, definition and engine
                OplModelSource     subSource = oplF.CreateOplModelSource(DATADIR + "/cutstock-sub.mod");
                OplModelDefinition subDef    = oplF.CreateOplModelDefinition(subSource, settings);
                Cplex subCplex = oplF.CreateCplex();
                subCplex.SetOut(null);

                const int nbItems = 5;
                IIntRange items   = masterCplex.IntRange(1, 5);
                double    best;
                double    curr = double.MaxValue;
                do
                {
                    best = curr;

                    masterCplex.ClearModel();

                    OplRunConfiguration masterRC = oplF.CreateOplRunConfiguration(masterRC0.OplModel.ModelDefinition, masterDataElements);
                    masterRC.Cplex = masterCplex;
                    masterRC.OplModel.Generate();

                    Console.Out.WriteLine("Solve master.");
                    if (masterCplex.Solve())
                    {
                        curr = masterCplex.ObjValue;
                        Console.Out.WriteLine("OBJECTIVE: " + curr);
                        status = 0;
                    }
                    else
                    {
                        Console.Out.WriteLine("No solution!");
                        status = 1;
                    }

                    // prepare sub model data
                    OplDataElements subDataElements = oplF.CreateOplDataElements();
                    subDataElements.AddElement(masterDataElements.GetElement("RollWidth"));
                    subDataElements.AddElement(masterDataElements.GetElement("Size"));
                    subDataElements.AddElement(masterDataElements.GetElement("Duals"));
                    // get reduced costs and set them in sub problem
                    INumMap duals = subDataElements.GetElement("Duals").AsNumMap();
                    for (int i = 1; i <= nbItems; i++)
                    {
                        IForAllRange forAll = (IForAllRange)masterRC.OplModel.GetElement("ctFill").AsConstraintMap().Get(i);
                        duals.Set(i, masterCplex.GetDual(forAll));
                    }
                    //make sub model
                    OplModel subOpl = oplF.CreateOplModel(subDef, subCplex);
                    subOpl.AddDataSource(subDataElements);
                    subOpl.Generate();

                    Console.Out.WriteLine("Solve sub.");
                    if (subCplex.Solve())
                    {
                        Console.Out.WriteLine("OBJECTIVE: " + subCplex.ObjValue);
                        status = 0;
                    }
                    else
                    {
                        Console.Out.WriteLine("No solution!");
                        status = 1;
                    }

                    if (subCplex.ObjValue > -RC_EPS)
                    {
                        break;
                    }

                    // Add variable in master model
                    IIntMap newFill = masterCplex.IntMap(items);
                    for (int i = 1; i <= nbItems; i++)
                    {
                        int coef = (int)subCplex.GetValue(subOpl.GetElement("Use").AsIntVarMap().Get(i));
                        newFill.Set(i, coef);
                    }
                    ITupleBuffer buf = masterDataElements.GetElement("Patterns").AsTupleSet().MakeTupleBuffer(-1);
                    buf.SetIntValue("id", masterDataElements.GetElement("Patterns").AsTupleSet().Size);
                    buf.SetIntValue("cost", 1);
                    buf.SetIntMapValue("fill", newFill);
                    buf.Commit();

                    subOpl.End();
                    masterRC.End();
                } while (best != curr && status == 0);
                oplF.End();
            }
            catch (ILOG.OPL.OplException ex)
            {
                Console.WriteLine(ex.Message);
                status = 2;
            }
            catch (ILOG.Concert.Exception ex)
            {
                Console.WriteLine(ex.Message);
                status = 3;
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.Message);
                status = 4;
            }

            Console.WriteLine("--Press <Enter> to exit--");
            Console.ReadLine();
            return(status);
        }
 //Int
 public static int GetRandom(this IIntRange range)
 {
     return(MoeTools.Random.GetInt(range.Min, range.Max));
 }
 public static int Clamp(this IIntRange range, int value)
 {
     return(Mathf.Clamp(value, range.Min, range.Max));
 }
Ejemplo n.º 5
0
 public static void UpdateIntRange(this IIntRange to, IIntRange from)
 {
     to.StartValue = from.StartValue;
     to.EndValue   = from.EndValue;
 }