¿Cómo utilizar la programación de restricciones para optimizar las cestas de compras?

Tengo una lista de artículos que quiero comprar. Los artículos son ofrecidos por diferentes tiendas y precios diferentes. Las tiendas tienen gastos de envío individuales. Estoy buscando una estrategia de compra óptima (y una biblioteca de Java que lo respalde) para comprar todos los artículos con un precio total mínimo.

Ejemplo:El artículo 1 se ofrece en Shop1 por $ 100, en Shop2 por $ 111.Item2 se ofrece en Shop1 por $ 90, en Shop2 por $ 85.Costo de entrega de Shop1: $ 10 si el pedido total <$ 150; $ 0 de lo contrarioCosto de entrega de Shop2: $ 5 si el pedido total <$ 50; $ 0 de lo contrarioSi compro Item1 y Item2 en Shop1, el costo total es de $ 100 + $ 90 + $ 0 = $ 190.Si compro Item1 y Item2 en Shop2, el costo total es de $ 111 + $ 85 + $ 0 = $ 196.Si compro Item1 en Shop1 y Item2 en Shop2, el costo total es de $ 100 + $ 10 + $ 85 + $ 0 = 195.

Obtengo el precio mínimo si ordeno el Artículo 1 y el Artículo 2 en la Tienda 1: $ 190

Lo que probé hasta ahora

Yo preguntéotra pregunta antes de eso me llevó al campo de la programación de restricciones. Eché un vistazo acrema ychoco, pero no descubrí cómo crear un modelo para resolver mi problema.

         | shop1 | shop2 | shop3 | ...
-----------------------------------------
item1    | p11   | p12   | p13   |
item2    | p21   | p22   | p23   |
 .       |       |       |       |
 .       |       |       |       |
-----------------------------------------
shipping | s1    | s2    | s3    |
limit    | l1    | l2    | l3    |
-----------------------------------------
total    | t1    | t2    | t3    |
-----------------------------------------

Mi idea era definir estas restricciones:

cada precio "pxy"se define en el dominio (0, c) dondec es el precio del artículo en esta tiendasolo un precio en una línea no debe ser ceroSi uno o más artículos se compran en una tienda y la suma de los precios es inferior al límite, agregue el costo de envío al costo totalel costo total de la tienda es la suma de los precios de todos los artículos en una tiendael costo total es la suma de todos los totales de la tienda

El objetivo es el "costo total". Quiero minimizar esto.

En crema no pude expresar la restricción "si entonces" para los costos de envío condicionales.

En choco existen estas restricciones, pero incluso para 5 artículos y 10 tiendas, el programa se ejecutó durante 10 minutos sin encontrar una solución.

Pregunta

¿Cómo debo expresar mis restricciones para hacer que este problema sea solucionable para un solucionador de programación de restricciones?

Respuestas a la pregunta(3)

Su respuesta a la pregunta