]> AND Private Git Repository - 14Mons.git/blob - experiments/smm2bis.pl
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
initiailisation
[14Mons.git] / experiments / smm2bis.pl
1 :-use_module(library(clpfd)).
2
3
4 % N is the dot product of lists V1 and V2.
5 dot(V1, V2, N) :- maplist(product,V1,V2,P), sumlist(P,N).
6 product(N1,N2,N3) :- N3 is N1*N2.
7
8 % Matrix multiplication with matrices represented
9 % as lists of lists. M3 is the product of M1 and M2
10 mmult(M1, M2, M3) :- transpose(M2,MT), maplist(mm_helper(MT), M1, M3).
11 mm_helper(M2, I1, M3) :- maplist(dot(I1), M2, M3).
12
13
14 suml([],[],[]).
15
16 suml(L1,L2,[E1 + E2|R2]):-
17     L1 = [E1|T1],
18     L2 = [E2|T2],
19     suml(T1,T2,R2).
20
21
22
23 summ([],[],[]).
24 summ(M1,M2,[Lr|R2]):-
25     M1 = [E1|T1],
26     M2 = [E2|T2],
27     suml(E1,E2,Lr),
28     summ(T1,T2,R2).
29
30
31 flatten(List, Flattened):-
32   flatten(List, [], Flattened).
33
34 flatten([], Flattened, Flattened).
35 flatten([Item|Tail], L, Flattened):-
36   flatten(Item, L1, Flattened),
37   flatten(Tail, L, L1).
38 flatten(Item, Flattened, [Item|Flattened]):-
39   \+ is_list(Item).
40
41 touspositifs(X):-
42     flatten(X,XF),
43     tp(XF).
44
45 tp([]).
46 tp(X):-
47     X = [E|L],
48     E #> 0,
49     tp(L).
50
51
52
53
54 sc2(X):-
55     mmult(X,X,X2),
56     mmult(X,X2,X3),
57     mmult(X,X3,X4),
58     summ(X,X2,S1),
59     summ(S1,X3,S2),
60     summ(S2,X4,S3),
61     touspositifs(S3).
62
63
64
65
66
67 bistoc(M):-
68   M=[[M0_0, M0_1, 0, M0_3], [M1_0, M1_1, 0, M1_3], 
69      [M2_0, 0, M2_2, M2_3], [0, M3_1, M3_2, M3_3]],
70          [M0_0, M1_1, M2_2, M3_3] ins 0..2,
71   [M0_1, M0_3, M1_0, M1_3, M2_0, M2_3, M3_1, M3_2] ins 0..1,
72   M0_0+ M0_1+ M0_2 #=2, M1_0+ M1_1+ M1_3 #=2,
73   M2_0+ M2_2+ M2_3 #=2, M3_1+ M3_2+ M3_3 #=2,
74   M0_0+ M1_0+ M2_0 #=2, M0_1+ M1_1+ M3_1 #=2, 
75   M0_2+ M2_2+ M3_2 #=2, M1_3+ M2_3+ M3_3 #=2,
76   mmult(M,M,M2),
77   mmult(M,M2,M3),
78   mmult(M,M3,M4),
79   summ(M,M2,S2),
80   summ(S2,M3,S3),
81   summ(S3,M4,S4),
82   allpositive(S4),
83   label([M0_0, M0_1, M0_3, M1_0, M1_1, M1_3, M2_0, M2_2, M2_3, M3_1, M3_2, M3_3]),
84
85   open('res2.txt',append,Stream), 
86   write(Stream,M),  
87   close(Stream).
88     
89
90 display_m([]).
91 display_m([El|R]):-
92     write(El),
93     display_m(R).
94
95
96 solution(L):-
97     get_time(T0),
98     findall(X,bistoc(X),L),
99     get_time(T1),
100     DT is T1 - T0,
101     write('but : '),writeln(DT).
102
103
104
105
106
107
108
109
110