У меня есть следующее решение проблемы матричного умножения.Умножение матричной цепочки в прологе
matMul([X], os(0, X)).
matMul(L, os(A, m(a, d(D1, D2)))) :-
append([L1|L1s], [L2|L2s], L),
matMul([L1|L1s], os(A1, m(_, d(D1, C1)))),
matMul([L2|L2s], os(A2, m(_, d(_, D2)))),
A is A1 + A2 + (D1 * C1 * D2).
Эта программа дает мне все возможные решения.
?- matMul([m(a,d(5,4)), m(a,d(4,6)), m(a,d(6,2)), m(a,d(2,7))], A).
A = os(392, m(a, d(5, 7))) ;
A = os(244, m(a, d(5, 7))) ;
A = os(414, m(a, d(5, 7))) ;
**A = os(158, m(a, d(5, 7))) ;**
A = os(250, m(a, d(5, 7))) ;
false.
Как мы видим, один из них является оптимальным. Что я хотел бы сделать, это изменить этот вариант, чтобы получить только одно решение, оптимальное.
Если кто-либо может предоставить любой указатель/предложение для его достижения, это будет действительно полезно.
Спасибо.