mirror of
https://github.com/larstvei/SMT-for-IN3070.git
synced 2024-11-26 03:28:31 +00:00
Tweaks
This commit is contained in:
parent
48c20b294e
commit
b6ac1a131f
@ -81,11 +81,12 @@ cry for help.
|
||||
|
||||
In addition, one axiom is added to formalize induction. Because a theory is
|
||||
closed under implication, the theory consists of all true first-order
|
||||
propositions that follows from these axioms, which corresponds to the true
|
||||
propositions about natural numbers.
|
||||
|
||||
However, in Z3, we don't see such axioms; they just provide the formal
|
||||
justification for implementing special solvers for problem domains like
|
||||
natural numbers other commonly used theories. In z3, we could write
|
||||
natural numbers other commonly used theories. In Z3, we could write
|
||||
something like this:
|
||||
|
||||
#+BEGIN_SRC z3
|
||||
@ -198,11 +199,11 @@ cry for help.
|
||||
** Constraint modeling
|
||||
|
||||
We need to capture our intention with first-order logic formulas, and
|
||||
preferably quantifier-free. In SMT-solving, quantifier-free means that we
|
||||
only try to solve a set of constraints where no variable is bound by a
|
||||
quantifier; these are usually much easier to solve. Rather, we use a finite
|
||||
set of constant symbols, with some associated sort, and try to find an
|
||||
interpretation for them.
|
||||
preferably quantifier-free. In the context of SMT-solving, quantifier-free
|
||||
means that we only try to solve a set of constraints where no variable is
|
||||
bound by a quantifier; these are usually much easier to solve. Rather, we
|
||||
use a finite set of constant symbols, with some associated sort, and try to
|
||||
find an interpretation for them.
|
||||
|
||||
The end result needs to be a set of committees, where each committee
|
||||
consists of two examiners with a number of exams to correct. An important
|
||||
@ -215,12 +216,13 @@ cry for help.
|
||||
|
||||
A natural encoding could be modeling a committee as an integer constant,
|
||||
where the value assigned to a committee corresponds to the number of exams
|
||||
they correct. It is quite easy to compute all possible committees, and make
|
||||
they correct. If the committee don't are not assigned any exams, we discard
|
||||
it completely. It is quite easy to compute all possible committees, and make
|
||||
one integer constant for each of them.
|
||||
|
||||
Let's write a function that takes a list of capacities, and return a
|
||||
dictionary, associating (Python) committees to their corresponding integer
|
||||
constant.
|
||||
dictionary, associating committees to their corresponding integer constant.
|
||||
Remember that we represent a committee as a set of exactly two examiners.
|
||||
|
||||
#+BEGIN_SRC python :tangle committees.py
|
||||
def committees(C):
|
||||
@ -230,11 +232,13 @@ cry for help.
|
||||
return {c : Int(str(c)) for c in cs}
|
||||
#+END_SRC
|
||||
|
||||
** Capacity constraints
|
||||
|
||||
Now we must ensure that no examiner receives more exams than their capacity.
|
||||
Given an examiner $i$, where $0 <= i < N$, we let $c_i$ denote the set of
|
||||
Given an examiner $i$, where $0 <= i < |C|$, we let $c_i$ denote the set of
|
||||
all committees $i$ participates in. Then $\sum{c_i} <= C[i]$, i.e. the sum
|
||||
of the committees $c_i$ does not exceed the capacity of the examiner $i$. We
|
||||
write a function that encodes these constraints.
|
||||
of the exams corrected by committees in $c_i$ does not exceed the capacity
|
||||
of the examiner $i$. We write a function that encodes these constraints.
|
||||
|
||||
#+BEGIN_SRC python :tangle committees.py
|
||||
def capacity_constraint(comms, C):
|
||||
|
Loading…
Reference in New Issue
Block a user