Metadata-Version: 2.3
Name: scop-solver-trial
Version: 0.1.1
Summary: Scop trial version.
Author-email: Mikio Kubo <kubo@kaiyodai.ac.jp>, Saito Tsutomu <tsutomu7@hotmail.co.jp>
License: Apache-2.0
Requires-Python: >=3.10
Requires-Dist: plotly>=5.24.1
Description-Content-Type: text/markdown

# SCOP Trial 
> SCOP (SOlver for Constraint Programming) trial 


## How to Install to Jupyter Notebook (Lab) and/or Google Colaboratory

```
pip install scop-solver-trial
```

## How to use

See https://mikiokubo.github.io/scoptrial/  and  https://www.logopt.com/scop2/ 

Here is an example. 

```python
from scop_solver_trial import Alldiff, Linear, Model

"""
Example 1 (Assignment Problem):
Three jobs (0,1,2) must be assigned to three workers (A,B,C)
so that each job is assigned to exactly one worker.
The cost matrix is represented by the list of lists
Cost=[[15, 20, 30],
      [7, 15, 12],
      [25,10,13]],
where rows of the matrix are workers, and columns are jobs.
Find the minimum cost assignment of workers to jobs.
"""

workers = ["A", "B", "C"]
Jobs = [0, 1, 2]
Cost = {
    ("A", 0): 15,
    ("A", 1): 20,
    ("A", 2): 30,
    ("B", 0): 7,
    ("B", 1): 15,
    ("B", 2): 12,
    ("C", 0): 25,
    ("C", 1): 10,
    ("C", 2): 13,
}

m = Model()
x = {}
for i in workers:
    x[i] = m.addVariable(name=i, domain=Jobs)

x_list = []
for i in x:
    x_list.append(x[i])

con1 = Alldiff("AD", x_list, weight="inf")

con2 = Linear("linear_constraint", weight=1, rhs=0, direction="<=")
for i in workers:
    for j in Jobs:
        con2.addTerms(Cost[i, j], x[i], j)

m.addConstraint(con1)
m.addConstraint(con2)

print(m)

m.Params.TimeLimit = 1
sol, violated = m.optimize()

if m.Status == 0:
    print("solution")
    for x in sol:
        print(x, sol[x])
    print("violated constraint(s)")
    for v in violated:
        print(v, violated[v])
```

    Model: 
    number of variables = 3  
    number of constraints= 2  
    variable A:['0', '1', '2'] = None 
    variable B:['0', '1', '2'] = None 
    variable C:['0', '1', '2'] = None 
    AD: weight= inf type=alldiff  A B C ;  :LHS =0  
    linear_constraint: weight= 1 type=linear 15(A,0) 20(A,1) 30(A,2) 7(B,0) 15(B,1) 12(B,2) 25(C,0) 10(C,1) 13(C,2) <=0 :LHS =0 
    
     ================ Now solving the problem ================ 
    
    solution
    A 0
    B 2
    C 1
    violated constraint(s)
    linear_constraint 37
