本文整理汇总了C#中DataReader.Next方法的典型用法代码示例。如果您正苦于以下问题:C# DataReader.Next方法的具体用法?C# DataReader.Next怎么用?C# DataReader.Next使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DataReader
的用法示例。
在下文中一共展示了DataReader.Next方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Main
public static void Main(String[] args)
{
String filename = "../../../../examples/data/openshop_default.data";
int failLimit = 10000;
if (args.Length > 0)
filename = args[0];
if (args.Length > 1)
failLimit = Convert.ToInt32(args[1]);
CP cp = new CP();
DataReader data = new DataReader(filename);
int nbJobs = data.Next();
int nbMachines = data.Next();
List<IIntervalVar>[] jobs = new List<IIntervalVar>[nbJobs];
for (int i = 0; i < nbJobs; i++)
jobs[i] = new List<IIntervalVar>();
List<IIntervalVar>[] machines = new List<IIntervalVar>[nbMachines];
for (int j = 0; j < nbMachines; j++)
machines[j] = new List<IIntervalVar>();
List<IIntExpr> ends = new List<IIntExpr>();
for (int i = 0; i < nbJobs; i++)
{
for (int j = 0; j < nbMachines; j++)
{
int pt = data.Next();
IIntervalVar ti = cp.IntervalVar(pt);
jobs[i].Add(ti);
machines[j].Add(ti);
ends.Add(cp.EndOf(ti));
}
}
for (int i = 0; i < nbJobs; i++)
cp.Add(cp.NoOverlap(jobs[i].ToArray()));
for (int j = 0; j < nbMachines; j++)
cp.Add(cp.NoOverlap(machines[j].ToArray()));
IObjective objective = cp.Minimize(cp.Max(ends.ToArray()));
cp.Add(objective);
cp.SetParameter(CP.IntParam.FailLimit, failLimit);
Console.WriteLine("Instance \t: " + filename);
if (cp.Solve())
{
Console.WriteLine("Makespan \t: " + cp.ObjValue);
}
else
{
Console.WriteLine("No solution found.");
}
}
示例2: Main
public static void Main(String[] args)
{
String filename = "../../../../examples/data/jobshop_default.data";
int nbJobs, nbMachines;
if (args.Length > 0)
filename = args[0];
CP cp = new CP();
DataReader data = new DataReader(filename);
nbJobs = data.Next();
nbMachines = data.Next();
List<IIntExpr> ends = new List<IIntExpr>();
List<IIntervalVar>[] machines = new List<IIntervalVar>[nbMachines];
for (int j = 0; j < nbMachines; j++)
machines[j] = new List<IIntervalVar>();
for (int i = 0; i < nbJobs; i++)
{
IIntervalVar prec = cp.IntervalVar();
for (int j = 0; j < nbMachines; j++)
{
int m, d;
m = data.Next();
d = data.Next();
IIntervalVar ti = cp.IntervalVar(d);
machines[m].Add(ti);
if (j > 0)
{
cp.Add(cp.EndBeforeStart(prec, ti));
}
prec = ti;
}
ends.Add(cp.EndOf(prec));
}
for (int j = 0; j < nbMachines; j++)
cp.Add(cp.NoOverlap(machines[j].ToArray()));
IObjective objective = cp.Minimize(cp.Max(ends.ToArray()));
cp.Add(objective);
Console.WriteLine("Instance \t: " + filename);
if (cp.Solve())
{
Console.WriteLine("Makespan \t: " + cp.ObjValue);
}
else
{
Console.WriteLine("No solution found.");
}
}
示例3: Main
public static void Main(String[] args)
{
String filename = "../../../../examples/data/flowshop_default.data";
int failLimit = 10000;
int nbJobs, nbMachines;
if (args.Length > 0)
filename = args[0];
if (args.Length > 1)
failLimit = Convert.ToInt32(args[1]);
CP cp = new CP();
DataReader data = new DataReader(filename);
nbJobs = data.Next();
nbMachines = data.Next();
List<IIntExpr> ends = new List<IIntExpr>();
List<IIntervalVar>[] machines = new List<IIntervalVar>[nbMachines];
for (int j = 0; j < nbMachines; j++)
machines[j] = new List<IIntervalVar>();
for (int i = 0; i < nbJobs; i++)
{
IIntervalVar prec = cp.IntervalVar();
for (int j = 0; j < nbMachines; j++)
{
int d = data.Next();
IIntervalVar ti = cp.IntervalVar(d);
machines[j].Add(ti);
if (j > 0)
{
cp.Add(cp.EndBeforeStart(prec, ti));
}
prec = ti;
}
ends.Add(cp.EndOf(prec));
}
IIntervalSequenceVar[] seqs = new IIntervalSequenceVar[nbMachines];
for (int j = 0; j < nbMachines; j++)
{
seqs[j] = cp.IntervalSequenceVar(machines[j].ToArray());
cp.Add(cp.NoOverlap(seqs[j]));
if (0 < j)
{
cp.Add(cp.SameSequence(seqs[0], seqs[j]));
}
}
IObjective objective = cp.Minimize(cp.Max(ends.ToArray()));
cp.Add(objective);
cp.SetParameter(CP.IntParam.FailLimit, failLimit);
Console.WriteLine("Instance \t: " + filename);
if (cp.Solve())
{
Console.WriteLine("Makespan \t: " + cp.ObjValue);
}
else
{
Console.WriteLine("No solution found.");
}
}
示例4: buildModel
//----- RCPSP Model creation ------------------------------------------------
private static void buildModel(String fileName)
{
int nbTasks, nbResources;
DataReader data = new DataReader(fileName);
try {
nbTasks = data.Next();
nbResources = data.Next();
List<IIntExpr> ends = new List<IIntExpr>();
List<IConstraint> capacityCtList = new List<IConstraint>();
List<IConstraint> precedenceCtList = new List<IConstraint>();
ICumulFunctionExpr[] resources = new ICumulFunctionExpr[nbResources];
int[] capacities = new int[nbResources];
for (int j = 0; j < nbResources; j++) {
capacities[j] = data.Next();
resources[j] = cp.CumulFunctionExpr();
}
IIntervalVar[] tasks = new IIntervalVar[nbTasks];
for (int i = 0; i < nbTasks; i++) {
tasks[i] = cp.IntervalVar();
tasks[i].Name = "ACT" + i;
}
for (int i = 0; i < nbTasks; i++) {
IIntervalVar task = tasks[i];
int d, smin, emax, nbSucc;
d = data.Next();
smin = data.Next();
emax = data.Next();
task.SizeMin = d;
task.SizeMax = d;
task.StartMin = smin;
task.EndMax = emax;
ends.Add(cp.EndOf(task));
for (int j = 0; j < nbResources; j++ ) {
int q = data.Next();
if (q > 0) {
resources[j].Add(cp.Pulse(task, q));
}
}
nbSucc = data.Next();
for (int s = 0; s < nbSucc; s++ ) {
int succ = data.Next();
IConstraint pct = cp.EndBeforeStart(task, tasks[succ]);
cp.Add(pct);
precedenceCtList.Add(pct);
}
}
for (int j = 0; j < nbResources; j++) {
IConstraint cct = cp.Le(resources[j], capacities[j]);
cp.Add(cct);
capacityCtList.Add(cct);
}
precedenceCts = precedenceCtList.ToArray();
capacityCts = capacityCtList.ToArray();
IObjective objective = cp.Minimize(cp.Max(ends.ToArray()));
cp.Add(objective);
} catch (ILOG.Concert.Exception e) {
Console.WriteLine("Error: " + e);
}
}
示例5: CreateModel
private void CreateModel(String dataFile)
{
DataReader data = new DataReader(dataFile);
nbJobs = data.Next();
nbMachines = data.Next();
int[] rel = new int[nbJobs];
int[] due = new int[nbJobs];
costs = new int[nbMachines][];
int[][] dur = new int[nbMachines][];
for (int j = 0; j < nbMachines; j++)
{
costs[j] = new int[nbJobs];
dur[j] = new int[nbJobs];
}
for (int i = 0; i < nbJobs; i++)
rel[i] = data.Next();
for (int i = 0; i < nbJobs; i++)
due[i] = data.Next();
for (int j = 0; j < nbMachines; j++)
for (int i = 0; i < nbJobs; i++)
costs[j][i] = data.Next();
for (int j = 0; j < nbMachines; j++)
for (int i = 0; i < nbJobs; i++)
dur[j][i] = data.Next();
machines = new IIntervalVar[nbMachines][];
for (int j = 0; j < nbMachines; j++)
machines[j] = new IIntervalVar[nbJobs];
for (int i = 0; i < nbJobs; i++)
{
IIntervalVar job = cp.IntervalVar();
job.StartMin = rel[i];
job.EndMax = due[i];
job.Name = "Op" + i;
IIntervalVar[] jobm = new IIntervalVar[nbMachines];
for (int j = 0; j < nbMachines; j++)
{
jobm[j] = cp.IntervalVar(dur[j][i]);
jobm[j].Name = "Alt" + i + "_" + j + "_C" + costs[j][i];
jobm[j].SetOptional();
machines[j][i] = jobm[j];
}
cp.Add(cp.Alternative(job, jobm));
}
for (int j = 0; j < nbMachines; j++)
cp.Add(cp.NoOverlap(machines[j]));
}
示例6: Main
public static void Main(String[] args)
{
String filename = "../../../../examples/data/rcpspmm_default.data";
int failLimit = 30000;
int nbTasks, nbRenewable, nbNonRenewable;
if (args.Length > 0)
filename = args[0];
if (args.Length > 1)
failLimit = Convert.ToInt32(args[1]);
CP cp = new CP();
DataReader data = new DataReader(filename);
nbTasks = data.Next();
nbRenewable = data.Next();
nbNonRenewable = data.Next();
ICumulFunctionExpr[] renewables = new ICumulFunctionExpr[nbRenewable];
IIntExpr[] nonRenewables = new IIntExpr[nbNonRenewable];
int[] capRenewables = new int[nbRenewable];
int[] capNonRenewables = new int[nbNonRenewable];
for (int j = 0; j < nbRenewable; j++)
{
renewables[j] = cp.CumulFunctionExpr();
capRenewables[j] = data.Next();
}
for (int j = 0; j < nbNonRenewable; j++)
{
nonRenewables[j] = cp.IntExpr();
capNonRenewables[j] = data.Next();
}
IIntervalVar[] tasks = new IIntervalVar[nbTasks];
List<IIntervalVar>[] modes = new List<IIntervalVar>[nbTasks];
for (int i = 0; i < nbTasks; i++)
{
tasks[i] = cp.IntervalVar();
modes[i] = new List<IIntervalVar>();
}
List<IIntExpr> ends = new List<IIntExpr>();
for (int i = 0; i < nbTasks; i++)
{
IIntervalVar task = tasks[i];
int d = data.Next();
int nbModes = data.Next();
int nbSucc = data.Next();
for (int k = 0; k < nbModes; k++)
{
IIntervalVar alt = cp.IntervalVar();
alt.SetOptional();
modes[i].Add(alt);
}
cp.Add(cp.Alternative(task, modes[i].ToArray()));
ends.Add(cp.EndOf(task));
for (int s = 0; s < nbSucc; s++)
{
int succ = data.Next();
cp.Add(cp.EndBeforeStart(task, tasks[succ]));
}
}
for (int i = 0; i < nbTasks; i++)
{
IIntervalVar task = tasks[i];
List<IIntervalVar> imodes = modes[i];
for (int k = 0; k < imodes.Count; k++)
{
int taskId = data.Next();
int modeId = data.Next();
int d = data.Next();
imodes[k].SizeMin = d;
imodes[k].SizeMax = d;
int q;
for (int j = 0; j < nbNonRenewable; j++)
{
q = data.Next();
if (0 < q)
{
renewables[j].Add(cp.Pulse(imodes[k], q));
}
}
for (int j = 0; j < nbNonRenewable; j++)
{
q = data.Next();
if (0 < q)
{
nonRenewables[j] = cp.Sum(nonRenewables[j], cp.Prod(q, cp.PresenceOf(imodes[k])));
}
}
}
}
for (int j = 0; j < nbRenewable; j++)
{
cp.Add(cp.Le(renewables[j], capRenewables[j]));
}
for (int j = 0; j < nbRenewable; j++)
{
cp.Add(cp.Le(nonRenewables[j], capNonRenewables[j]));
}
//.........这里部分代码省略.........
示例7: Main
public static void Main(String[] args)
{
String filename = "../../../../examples/data/learningeffect_default.data";
int failLimit = 10000;
int nbJobs, nbMachines;
if (args.Length > 0)
filename = args[0];
if (args.Length > 1)
failLimit = Convert.ToInt32(args[1]);
CP cp = new CP();
DataReader data = new DataReader(filename);
nbJobs = data.Next();
nbMachines = data.Next();
IIntExpr[] ends = new IIntExpr[nbJobs];
IIntervalVar[][] machines = new IIntervalVar[nbMachines][];
int[][] sizes = new int[nbMachines][];
for (int j = 0; j < nbMachines; j++) {
machines[j] = new IIntervalVar[nbJobs];
sizes[j] = new int[nbJobs];
}
for (int i = 0; i < nbJobs; i++)
{
IIntervalVar prec = cp.IntervalVar();
for (int j = 0; j < nbMachines; j++)
{
int m, d;
m = data.Next();
d = data.Next();
IIntervalVar ti = cp.IntervalVar(0, d);
machines[m][i] = ti;
sizes[m][i] = d;
if (j > 0)
{
cp.Add(cp.EndBeforeStart(prec, ti));
}
prec = ti;
}
ends[i] = cp.EndOf(prec);
}
for (int j = 0; j < nbMachines; j++)
{
double alpha = data.Next() / ((double) 100);
IIntervalVar[] chain = new IIntervalVar[nbJobs];
IIntervalVar prec = cp.IntervalVar();
IIntExpr[] indices = new IIntExpr[nbJobs];
for (int i = 0; i < nbJobs; i++) {
IIntervalVar syncti = cp.IntervalVar();
if (i > 0)
{
cp.Add(cp.EndBeforeStart(prec, syncti));
}
prec = syncti;
chain[i] = syncti;
IIntExpr index = cp.IntVar(0, nbJobs -1);
indices[i] = index;
// Learning effect captured by the decreasing function
// of the position (0 <= alpha <= 1).
// At first position, in the sequence index = 0; there is no
// learning effect and duration of the task is its nominal duration
cp.Add(cp.Eq(cp.SizeOf(machines[j][i]),
cp.Floor(cp.Prod(sizes[j][i],
cp.Power(alpha, index)))));
}
cp.Add(cp.Isomorphism(chain, machines[j], indices, nbJobs));
// The no-overlap is a redundant constraint in this quite
// simple model - it is used only to provide stronger inference.
cp.Add(cp.NoOverlap(machines[j]));
}
IObjective objective = cp.Minimize(cp.Max(ends));
cp.Add(objective);
cp.SetParameter(CP.IntParam.FailLimit, failLimit);
Console.WriteLine("Instance \t: " + filename);
if (cp.Solve())
{
Console.WriteLine("Makespan \t: " + cp.ObjValue);
}
else
{
Console.WriteLine("No solution found.");
}
}
示例8: Main
public static void Main(String[] args)
{
String filename = "../../../../examples/data/rcpsp_default.data";
int failLimit = 10000;
int nbTasks, nbResources;
if (args.Length > 0)
filename = args[0];
if (args.Length > 1)
failLimit = Convert.ToInt32(args[1]);
CP cp = new CP();
DataReader data = new DataReader(filename);
try
{
nbTasks = data.Next();
nbResources = data.Next();
List<IIntExpr> ends = new List<IIntExpr>();
ICumulFunctionExpr[] resources = new ICumulFunctionExpr[nbResources];
int[] capacities = new int[nbResources];
for (int j = 0; j < nbResources; j++)
{
capacities[j] = data.Next();
resources[j] = cp.CumulFunctionExpr();
}
IIntervalVar[] tasks = new IIntervalVar[nbTasks];
for (int i = 0; i < nbTasks; i++)
{
tasks[i] = cp.IntervalVar();
}
for (int i = 0; i < nbTasks; i++)
{
IIntervalVar task = tasks[i];
int d, nbSucc;
d = data.Next();
task.SizeMin = d;
task.SizeMax = d;
ends.Add(cp.EndOf(task));
for (int j = 0; j < nbResources; j++)
{
int q = data.Next();
if (q > 0)
resources[j].Add(cp.Pulse(task, q));
}
nbSucc = data.Next();
for (int s = 0; s < nbSucc; s++)
{
int succ = data.Next();
cp.Add(cp.EndBeforeStart(task, tasks[succ - 1]));
}
}
for (int j = 0; j < nbResources; j++)
{
cp.Add(cp.Le(resources[j], capacities[j]));
}
IObjective objective = cp.Minimize(cp.Max(ends.ToArray()));
cp.Add(objective);
cp.SetParameter(CP.IntParam.FailLimit, failLimit);
Console.WriteLine("Instance \t: " + filename);
if (cp.Solve())
{
Console.WriteLine("Makespan \t: " + cp.ObjValue);
}
else
{
Console.WriteLine("No solution found.");
}
}
catch (ILOG.Concert.Exception e)
{
Console.WriteLine(" ERROR: " + e);
}
}
示例9: Main
public static void Main(String[] args)
{
String filename = "../../../../examples/data/jobshopflex_default.data";
int failLimit = 10000;
if (args.Length > 0)
filename = args[0];
if (args.Length > 1)
failLimit = Convert.ToInt32(args[1]);
CP cp = new CP();
DataReader data = new DataReader(filename);
int nbJobs = data.Next();
int nbMachines = data.Next();
List<IIntervalVar>[] machines = new List<IIntervalVar>[nbMachines];
for (int j = 0; j < nbMachines; j++)
machines[j] = new List<IIntervalVar>();
List<IIntExpr> ends = new List<IIntExpr>();
for (int i = 0; i < nbJobs; i++)
{
int nbOperations = data.Next();
IIntervalVar prec = cp.IntervalVar();
for (int j = 0; j < nbOperations; j++)
{
int nbOpMachines = data.Next();
IIntervalVar master = cp.IntervalVar();
List<IIntervalVar> members = new List<IIntervalVar>();
for (int k = 0; k < nbOpMachines; k++)
{
int m = data.Next();
int d = data.Next();
IIntervalVar member = cp.IntervalVar(d);
member.SetOptional();
members.Add(member);
machines[m - 1].Add(member);
}
cp.Add(cp.Alternative(master, members.ToArray()));
if (j > 0)
cp.Add(cp.EndBeforeStart(prec, master));
prec = master;
}
ends.Add(cp.EndOf(prec));
}
for (int j = 0; j < nbMachines; j++)
{
cp.Add(cp.NoOverlap(machines[j].ToArray()));
}
IObjective objective = cp.Minimize(cp.Max(ends.ToArray()));
cp.Add(objective);
cp.SetParameter(CP.IntParam.FailLimit, failLimit);
Console.WriteLine("Instance \t: " + filename);
if (cp.Solve())
{
Console.WriteLine("Makespan \t: " + cp.ObjValue);
}
else
{
Console.WriteLine("No solution found.");
}
}
示例10: ReadData
private void ReadData(String fileName)
{
DataReader data = new DataReader(fileName);
numActors = data.Next();
actorPay = new int[numActors];
for (int a = 0; a < numActors; a++)
actorPay[a] = data.Next();
numScenes = data.Next();
sceneDuration = new int[numScenes];
for (int s = 0; s < numScenes; s++)
sceneDuration[s] = data.Next();
actorInScene = new IIntSet[numActors];
for (int a = 0; a < numActors; a++)
{
int[] inScene = new int[numScenes];
int nbScene = 0;
for (int s = 0; s < numScenes; s++)
{
inScene[s] = data.Next();
if (inScene[s] != 0)
nbScene++;
}
int[] playScene = new int[nbScene];
int n = 0;
for (int s = 0; s < numScenes; s++)
{
if (inScene[s] != 0)
{
playScene[n] = s;
n++;
}
}
actorInScene[a] = cp.IntSet(playScene);
}
}
示例11: Main
public static void Main(String[] args)
{
String filename = "../../../../examples/data/stochastic_jobshop_default.data";
int failLimit = 250000;
if (args.Length > 0)
filename = args[0];
if (args.Length > 1)
failLimit = Convert.ToInt32(args[1]);
// Data reading
DataReader data = new DataReader(filename);
int nbJobs, nbMachines, nbScenarios;
nbJobs = data.Next();
nbMachines = data.Next();
nbScenarios = data.Next();
int i,j,k;
// machines[i][j]: machine used by jth operation of job i
int[][] machines = new int[nbJobs][];
for (i = 0; i < nbJobs; i++) {
machines[i] = new int[nbMachines];
for (j = 0; j < nbMachines; j++) {
machines[i][j] = data.Next();
}
}
// durations[k][i][j]: duration of jth operation of job i in scenario k
int[][][] durations = new int[nbScenarios][][];
for (k = 0; k < nbScenarios; k++) {
durations[k] = new int[nbJobs][];
for (i = 0; i < nbJobs; i++) {
durations[k][i] = new int[nbMachines];
for (j = 0; j < nbMachines; j++) {
durations[k][i][j] = data.Next();
}
}
}
CP cp = new CP();
IIntervalSequenceVar[] refSequences = new IIntervalSequenceVar[nbMachines];
IIntExpr sumMakespan = cp.IntExpr();
for (k = 0; k < nbScenarios; k++) {
IIntervalSequenceVar[] scenarioSequences = new IIntervalSequenceVar[nbMachines];
IIntExpr scenarioMakespan =
MakeScenarioSubmodel(cp, nbJobs, nbMachines,
machines, durations[k],
scenarioSequences);
// Objective function is aggregated
sumMakespan = cp.Sum(sumMakespan, scenarioMakespan);
// For each machine, a sameSequence constraint is posted across all scenarios
if (0==k) {
refSequences = scenarioSequences;
} else {
for (j = 0; j < nbMachines; j++) {
cp.Add(cp.SameSequence(refSequences[j], scenarioSequences[j]));
}
}
}
// Objective function is expected makespan
INumExpr expectedMakespan = cp.Quot(sumMakespan, nbScenarios);
IObjective objective = cp.Minimize(expectedMakespan);
cp.Add(objective);
cp.SetParameter(CP.IntParam.FailLimit, failLimit);
cp.SetParameter(CP.IntParam.LogPeriod, 1000000);
Console.WriteLine("Instance \t: " + filename);
if (cp.Solve()) {
Console.WriteLine("Expected makespan \t: " + cp.ObjValue);
for (j=0; j<nbMachines; ++j) {
IIntervalSequenceVar s = refSequences[j];
Console.Write(s.Name + ":\t");
IIntervalVar op = cp.GetFirst(s);
for (; !op.Equals(cp.GetLast(s)); op = cp.GetNext(s, op))
Console.Write(op.Name+ "\t");
Console.WriteLine(op.Name+ "\t");
}
} else {
Console.WriteLine("No solution found.");
}
}
示例12: Main
static void Main(string[] args)
{
String filename;
if (args.Length > 0)
filename = args[0];
else
filename = "../../../../examples/data/facility.data";
CP cp = new CP();
int i, j;
DataReader data = new DataReader(filename);
int nbLocations = data.Next();
int nbStores = data.Next();
int[] capacity = new int[nbLocations];
int[] fixedCost = new int[nbLocations];
int[][] cost = new int[nbStores][];
for (i = 0; i < nbStores; i++)
cost[i] = new int[nbLocations];
for (j = 0; j < nbLocations; j++)
capacity[j] = data.Next();
for (j = 0; j < nbLocations; j++)
fixedCost[j] = data.Next();
for (i = 0; i < nbStores; i++)
for (j = 0; j < nbLocations; j++)
cost[i][j] = data.Next();
IIntVar[] supplier = cp.IntVarArray(nbStores, 0, nbLocations - 1);
IIntVar[] open = cp.IntVarArray(nbLocations, 0, 1);
for (i = 0; i < nbStores; i++)
cp.Add(cp.Eq(cp.Element(open, supplier[i]), 1));
for (j = 0; j < nbLocations; j++)
cp.Add(cp.Le(cp.Count(supplier, j), capacity[j]));
IIntExpr obj = cp.ScalProd(open, fixedCost);
for (i = 0; i < nbStores; i++)
obj = cp.Sum(obj, cp.Element(cost[i], supplier[i]));
cp.Add(cp.Minimize(obj));
cp.Solve();
Console.WriteLine();
Console.WriteLine("Optimal value: " + cp.GetValue(obj));
for (j = 0; j < nbLocations; j++)
{
if (cp.GetValue(open[j]) == 1)
{
Console.Write("Facility " + j + " is open, it serves stores ");
for (i = 0; i < nbStores; i++)
{
if (cp.GetValue(supplier[i]) == j)
Console.Write(i + " ");
}
Console.WriteLine();
}
}
}
示例13: Main
static void Main(string[] args)
{
String filename;
if (args.Length > 0)
filename = args[0];
else
filename = "../../../../examples/data/facility.data";
CP cp = new CP();
int i, j;
DataReader data = new DataReader(filename);
int nbLocations = data.Next();
int nbStores = data.Next();
int[] capacity = new int[nbLocations];
int[] fixedCost = new int[nbLocations];
int[][] cost = new int[nbStores][];
for (i = 0; i < nbStores; i++)
cost[i] = new int[nbLocations];
for (j = 0; j < nbLocations; j++)
capacity[j] = data.Next();
for (j = 0; j < nbLocations; j++)
fixedCost[j] = data.Next();
for (i = 0; i < nbStores; i++)
for (j = 0; j < nbLocations; j++)
cost[i][j] = data.Next();
IIntVar[] supplier = cp.IntVarArray(nbStores, 0, nbLocations - 1);
IIntVar[] open = cp.IntVarArray(nbLocations, 0, 1);
for (i = 0; i < nbStores; i++)
cp.Add(cp.Eq(cp.Element(open, supplier[i]), 1));
for (j = 0; j < nbLocations; j++)
cp.Add(cp.Le(cp.Count(supplier, j), capacity[j]));
IIntExpr obj = cp.ScalProd(open, fixedCost);
for (i = 0; i < nbStores; i++)
obj = cp.Sum(obj, cp.Element(cost[i], supplier[i]));
cp.Add(cp.Minimize(obj));
cp.SetParameter(CP.IntParam.Workers, 1);
cp.SetParameter(CP.IntParam.SearchType, CP.ParameterValues.DepthFirst);
cp.SetParameter(CP.IntParam.LogPeriod, 1);
cp.SetParameter(CP.IntParam.LogSearchTags, CP.ParameterValues.On);
cp.ClearExplanations();
cp.ExplainFailure(15);
cp.ExplainFailure(20);
int[] failureArray = { 3, 10, 11, 12 };
cp.ExplainFailure(failureArray);
cp.Solve();
Console.WriteLine();
Console.WriteLine("Optimal value: " + cp.GetValue(obj));
for (j = 0; j < nbLocations; j++)
{
if (cp.GetValue(open[j]) == 1)
{
Console.Write("Facility " + j + " is open, it serves stores ");
for (i = 0; i < nbStores; i++)
{
if (cp.GetValue(supplier[i]) == j)
Console.Write(i + " ");
}
Console.WriteLine();
}
}
}