示例#1
0
    public static void Main(String[] args)
    {
        String fileName  = "../../../../examples/data/sched_conflict.data";
        int    failLimit = 10000;

        if (args.Length > 0)
        {
            fileName = args[0];
        }
        if (args.Length > 1)
        {
            failLimit = Convert.ToInt32(args[1]);
        }
        try {
            SchedConflict problem         = new SchedConflict(fileName);
            int           nbCapacityCts   = capacityCts.Length;
            int           nbPrecedenceCts = precedenceCts.Length;
            IConstraint[] allCts          = new IConstraint[nbCapacityCts + nbPrecedenceCts];
            for (int i = 0; i < nbCapacityCts; ++i)
            {
                allCts[i] = capacityCts[i];
            }
            for (int i = 0; i < nbPrecedenceCts; ++i)
            {
                allCts[nbCapacityCts + i] = precedenceCts[i];
            }
            cp.SetParameter(CP.IntParam.FailLimit, failLimit);
            cp.SetParameter(CP.IntParam.CumulFunctionInferenceLevel, CP.ParameterValues.Extended);
            cp.SetParameter(CP.IntParam.ConflictRefinerOnVariables, CP.ParameterValues.On);
            Console.WriteLine("Instance \t: " + fileName);
            if (cp.Solve())
            {
                // A solution was found
                Console.WriteLine("Solution found with makespan : " + cp.ObjValue);
            }
            else
            {
                int status = cp.GetInfo(CP.IntInfo.FailStatus);
                if (status != CP.ParameterValues.SearchHasFailedNormally.Value)
                {
                    // No solution found but problem was not proved infeasible
                    Console.WriteLine("No solution found but problem was not proved infeasible.");
                }
                else
                {
                    // Run conflict refiner only if problem was proved infeasible
                    Console.WriteLine("Infeasible problem, running conflict refiner ...");
                    Console.WriteLine("SCENARIO 1: Basic conflict refiner:");
                    runBasicConflictRefiner();
                    cp.SetParameter(CP.IntParam.LogVerbosity, CP.ParameterValues.Quiet);
                    Console.WriteLine("SCENARIO 2: Conflict refiner with preference on resource capacity constraints:");
                    runConflictRefinerWithPreferences(cp, capacityCts, precedenceCts);
                    Console.WriteLine("SCENARIO 3: Conflict refiner with preference on precedence constraints:");
                    runConflictRefinerWithPreferences(cp, precedenceCts, capacityCts);
                    Console.WriteLine("SCENARIO 4: Conflict partition:");
                    runConflictRefinerPartition(cp, allCts);
                    Console.WriteLine("SCENARIO 5: All conflicts:");
                    runConflictRefinerAllConflicts(cp, allCts);
                }
            }
        } catch (ILOG.Concert.Exception e) {
            Console.WriteLine("Error: " + e);
        }
    }
示例#2
0
 public static void Main(String[] args)
 {
     String fileName = "../../../../examples/data/sched_conflict.data";
     int failLimit = 10000;
     if (args.Length > 0)
       fileName = args[0];
     if (args.Length > 1)
       failLimit = Convert.ToInt32(args[1]);
     try {
       SchedConflict problem = new SchedConflict(fileName);
       int nbCapacityCts   = capacityCts.Length;
       int nbPrecedenceCts = precedenceCts.Length;
       IConstraint[] allCts = new IConstraint[nbCapacityCts+nbPrecedenceCts];
       for (int i=0; i<nbCapacityCts; ++i) {
     allCts[i] = capacityCts[i];
       }
       for (int i=0; i<nbPrecedenceCts; ++i) {
     allCts[nbCapacityCts+i] = precedenceCts[i];
       }
       cp.SetParameter(CP.IntParam.FailLimit, failLimit);
       cp.SetParameter(CP.IntParam.CumulFunctionInferenceLevel, CP.ParameterValues.Extended);
       cp.SetParameter(CP.IntParam.ConflictRefinerOnVariables, CP.ParameterValues.On);
       Console.WriteLine("Instance \t: " + fileName);
       if (cp.Solve()) {
     // A solution was found
     Console.WriteLine("Solution found with makespan : " + cp.ObjValue);
       } else {
     int status = cp.GetInfo(CP.IntInfo.FailStatus);
     if (status != CP.ParameterValues.SearchHasFailedNormally.Value) {
       // No solution found but problem was not proved infeasible
       Console.WriteLine("No solution found but problem was not proved infeasible.");
     } else {
       // Run conflict refiner only if problem was proved infeasible
       Console.WriteLine("Infeasible problem, running conflict refiner ...");
       Console.WriteLine("SCENARIO 1: Basic conflict refiner:");
       runBasicConflictRefiner();
       cp.SetParameter(CP.IntParam.LogVerbosity, CP.ParameterValues.Quiet);
       Console.WriteLine("SCENARIO 2: Conflict refiner with preference on resource capacity constraints:");
       runConflictRefinerWithPreferences(cp, capacityCts, precedenceCts);
       Console.WriteLine("SCENARIO 3: Conflict refiner with preference on precedence constraints:");
       runConflictRefinerWithPreferences(cp, precedenceCts, capacityCts);
       Console.WriteLine("SCENARIO 4: Conflict partition:");
       runConflictRefinerPartition(cp, allCts);
       Console.WriteLine("SCENARIO 5: All conflicts:");
       runConflictRefinerAllConflicts(cp, allCts);
     }
       }
     } catch (ILOG.Concert.Exception e) {
       Console.WriteLine("Error: " + e);
     }
 }