Java Reference

Java Reference

LinearExprTest.java
Go to the documentation of this file.
1 // Copyright 2010-2022 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 package com.google.ortools.sat;
15 
16 import static com.google.common.truth.Truth.assertThat;
17 import static org.junit.jupiter.api.Assertions.assertEquals;
18 import static org.junit.jupiter.api.Assertions.assertNotNull;
19 
20 import com.google.ortools.Loader;
21 import com.google.ortools.util.Domain;
22 import org.junit.jupiter.api.BeforeEach;
23 import org.junit.jupiter.api.Test;
24 
25 public final class LinearExprTest {
26  @BeforeEach
27  public void setUp() {
29  }
30 
31  @Test
32  public void testLinearExprAdd() {
33  final CpModel model = new CpModel();
34  assertNotNull(model);
35  final Domain domain = new Domain(0, 10);
36  final IntVar y = model.newIntVarFromDomain(domain, "y");
37 
38  final LinearExpr expr = LinearExpr.newBuilder().add(y).build();
39  assertNotNull(expr);
40 
41  assertEquals(1, expr.numElements());
42  assertEquals(y.getIndex(), expr.getVariableIndex(0));
43  assertEquals(1, expr.getCoefficient(0));
44  assertEquals(0, expr.getOffset());
45  }
46 
47  @Test
48  public void testLinearExprAddLiteral() {
49  final CpModel model = new CpModel();
50  assertNotNull(model);
51  final BoolVar y = model.newBoolVar("y");
52 
53  final LinearExpr expr = LinearExpr.newBuilder().add(y).build();
54  assertNotNull(expr);
55 
56  assertEquals(1, expr.numElements());
57  assertEquals(y.getIndex(), expr.getVariableIndex(0));
58  assertEquals(1, expr.getCoefficient(0));
59  assertEquals(0, expr.getOffset());
60  }
61 
62  @Test
64  final CpModel model = new CpModel();
65  assertNotNull(model);
66  final BoolVar y = model.newBoolVar("y");
67 
68  final LinearExpr expr = LinearExpr.newBuilder().add(y.not()).build();
69  assertNotNull(expr);
70 
71  assertEquals(1, expr.numElements());
72  assertEquals(y.getIndex(), expr.getVariableIndex(0));
73  assertEquals(-1, expr.getCoefficient(0));
74  assertEquals(1, expr.getOffset());
75  }
76 
77  @Test
78  public void testLinearExprTerm() {
79  final CpModel model = new CpModel();
80  assertNotNull(model);
81  final Domain domain = new Domain(0, 10);
82  final IntVar y = model.newIntVarFromDomain(domain, "y");
83 
84  final LinearExpr expr = LinearExpr.newBuilder().addTerm(y, 12).build();
85  assertNotNull(expr);
86 
87  assertEquals(1, expr.numElements());
88  assertEquals(y.getIndex(), expr.getVariableIndex(0));
89  assertEquals(12, expr.getCoefficient(0));
90  assertEquals(0, expr.getOffset());
91  }
92 
93  @Test
94  public void testLinearExprBooleanTerm() {
95  final CpModel model = new CpModel();
96  assertNotNull(model);
97  final Literal y = model.newBoolVar("y");
98 
99  final LinearExpr expr = LinearExpr.newBuilder().addTerm(y.not(), 12).build();
100  assertNotNull(expr);
101 
102  assertThat(expr.numElements()).isEqualTo(1);
103  assertThat(expr.getVariableIndex(0)).isEqualTo(y.getIndex());
104  assertThat(expr.getCoefficient(0)).isEqualTo(-12);
105  assertThat(expr.getOffset()).isEqualTo(12);
106  }
107 
108  @Test
109  public void testLinearExprAffine() {
110  final CpModel model = new CpModel();
111  assertNotNull(model);
112  final Domain domain = new Domain(0, 10);
113  final IntVar y = model.newIntVarFromDomain(domain, "y");
114 
115  final LinearExpr expr = LinearExpr.newBuilder().addTerm(y, 12).add(5).build();
116  assertNotNull(expr);
117 
118  assertThat(expr.numElements()).isEqualTo(1);
119  assertThat(expr.getVariableIndex(0)).isEqualTo(y.getIndex());
120  assertThat(expr.getCoefficient(0)).isEqualTo(12);
121  assertThat(expr.getOffset()).isEqualTo(5);
122  }
123 
124  @Test
126  final CpModel model = new CpModel();
127  assertNotNull(model);
128  final Literal y = model.newBoolVar("y");
129 
130  final LinearExpr expr = LinearExpr.newBuilder().addTerm(y.not(), 12).add(5).build();
131  assertNotNull(expr);
132 
133  assertThat(expr.numElements()).isEqualTo(1);
134  assertThat(expr.getVariableIndex(0)).isEqualTo(y.getIndex());
135  assertThat(expr.getCoefficient(0)).isEqualTo(-12);
136  assertThat(expr.getOffset()).isEqualTo(17);
137  }
138 
139  @Test
140  public void testLinearExprSum() {
141  final CpModel model = new CpModel();
142  assertNotNull(model);
143  final Domain domain = new Domain(0, 10);
144  final IntVar x = model.newIntVarFromDomain(domain, "x");
145  final IntVar y = model.newIntVarFromDomain(domain, "y");
146 
147  final LinearExpr expr = LinearExpr.newBuilder().add(x).add(y).build();
148  assertNotNull(expr);
149 
150  assertThat(expr.numElements()).isEqualTo(2);
151  assertThat(expr.getVariableIndex(0)).isEqualTo(x.getIndex());
152  assertThat(expr.getCoefficient(0)).isEqualTo(1);
153  assertThat(expr.getVariableIndex(1)).isEqualTo(y.getIndex());
154  assertThat(expr.getCoefficient(1)).isEqualTo(1);
155  assertThat(expr.getOffset()).isEqualTo(0);
156  }
157 
158  @Test
160  final CpModel model = new CpModel();
161  assertNotNull(model);
162  final Domain domain = new Domain(0, 10);
163  final IntVar x = model.newIntVarFromDomain(domain, "x");
164  final IntVar y = model.newIntVarFromDomain(domain, "y");
165 
166  final LinearExpr expr = LinearExpr.newBuilder().addTerm(x, 3).addTerm(y, 5).build();
167  assertNotNull(expr);
168 
169  assertThat(expr.numElements()).isEqualTo(2);
170  assertThat(expr.getVariableIndex(0)).isEqualTo(x.getIndex());
171  assertThat(expr.getCoefficient(0)).isEqualTo(3);
172  assertThat(expr.getVariableIndex(1)).isEqualTo(y.getIndex());
173  assertThat(expr.getCoefficient(1)).isEqualTo(5);
174  assertThat(expr.getOffset()).isEqualTo(0);
175  }
176 
177  @Test
178  public void testLinearExprBooleanSum() {
179  final CpModel model = new CpModel();
180  assertNotNull(model);
181  final Literal x = model.newBoolVar("x");
182  final Literal y = model.newBoolVar("y");
183 
184  final LinearExpr expr = LinearExpr.newBuilder().add(x).add(y.not()).build();
185  assertNotNull(expr);
186 
187  assertThat(expr.numElements()).isEqualTo(2);
188  assertThat(expr.getVariableIndex(0)).isEqualTo(x.getIndex());
189  assertThat(expr.getCoefficient(0)).isEqualTo(1);
190  assertThat(expr.getVariableIndex(1)).isEqualTo(y.getIndex());
191  assertThat(expr.getCoefficient(1)).isEqualTo(-1);
192  assertThat(expr.getOffset()).isEqualTo(1);
193  }
194 
195  @Test
197  final CpModel model = new CpModel();
198  assertNotNull(model);
199  final Literal x = model.newBoolVar("x");
200  final Literal y = model.newBoolVar("y");
201 
202  final LinearExpr expr = LinearExpr.newBuilder().addTerm(x, 3).addTerm(y.not(), 5).build();
203  assertNotNull(expr);
204 
205  assertThat(expr.numElements()).isEqualTo(2);
206  assertThat(expr.getVariableIndex(0)).isEqualTo(x.getIndex());
207  assertThat(expr.getCoefficient(0)).isEqualTo(3);
208  assertThat(expr.getVariableIndex(1)).isEqualTo(y.getIndex());
209  assertThat(expr.getCoefficient(1)).isEqualTo(-5);
210  assertThat(expr.getOffset()).isEqualTo(5);
211  }
212 }
Load native libraries needed for using ortools-java.
Definition: Loader.java:33
static synchronized void loadNativeLibraries()
Definition: Loader.java:104
An Boolean variable.
Definition: BoolVar.java:20
Literal not()
Returns the negation of a boolean variable.
Definition: BoolVar.java:33
Main modeling class.
Definition: CpModel.java:42
BoolVar newBoolVar(String name)
Creates a Boolean variable with the given name.
Definition: CpModel.java:88
IntVar newIntVarFromDomain(Domain domain, String name)
Creates an integer variable with given domain.
Definition: CpModel.java:83
An integer variable.
Definition: IntVar.java:21
int getIndex()
Returns the index of the variable in the underlying CpModelProto.
Definition: IntVar.java:44
LinearExprBuilder add(LinearArgument expr)
LinearExpr build()
Builds a linear expression.
LinearExprBuilder addTerm(LinearArgument expr, long coeff)
A linear expression (sum (ai * xi) + b).
long getCoefficient(int index)
Returns the ith coefficient.
int numElements()
Returns the number of terms (excluding the constant one) in this expression.
static LinearExprBuilder newBuilder()
Returns a builder.
long getOffset()
Returns the constant part of the expression.
int getVariableIndex(int index)
Returns the index of the ith variable.
Interface to describe a boolean variable or its negation.
Definition: Literal.java:17
Literal not()
Returns the Boolean negation of the current literal.