DotNet Reference

DotNet Reference

ReifiedSampleSat.cs
Go to the documentation of this file.
1 // Copyright 2010-2018 Google LLC
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
5 //
6 // http://www.apache.org/licenses/LICENSE-2.0
7 //
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
13 
14 using System;
15 using Google.OrTools.Sat;
16 
17 public class ReifiedSampleSat
18 {
19  static void Main()
20  {
21  CpModel model = new CpModel();
22 
23  IntVar x = model.NewBoolVar("x");
24  IntVar y = model.NewBoolVar("y");
25  IntVar b = model.NewBoolVar("b");
26 
27  // First version using a half-reified bool and.
28  model.AddBoolAnd(new ILiteral[] {x, y.Not()}).OnlyEnforceIf(b);
29 
30  // Second version using implications.
31  model.AddImplication(b, x);
32  model.AddImplication(b, y.Not());
33 
34  // Third version using bool or.
35  model.AddBoolOr(new ILiteral[] {b.Not(), x});
36  model.AddBoolOr(new ILiteral[] {b.Not(), y.Not()});
37  }
38 }
Wrapper class around the cp_model proto.
Definition: CpModel.cs:24
Constraint AddImplication(ILiteral a, ILiteral b)
Definition: CpModel.cs:395
Constraint AddBoolAnd(IEnumerable< ILiteral > literals)
Definition: CpModel.cs:417
Constraint AddBoolOr(IEnumerable< ILiteral > literals)
Definition: CpModel.cs:405
ILiteral Not()
IntVar NewBoolVar(string name)
Definition: CpModel.cs:67
Definition: CpModel.pb.cs:12