Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test C Vehicle Routing #219

Open
ebenstom opened this issue Nov 22, 2023 · 1 comment
Open

Test C Vehicle Routing #219

ebenstom opened this issue Nov 22, 2023 · 1 comment

Comments

@ebenstom
Copy link

Hola, con respecto a este problema, me pasan perfectamente los test A y B, lo que me llevó a pensar en que mi código estaba efectivamente bien. Esto se contradice con que en los test C me pasan todos excepto 3. De esta forma me he dado cuenta revisando el código base que so nos ha entregado que existen errores en su implementación. Para hacer un ejemplo concreto, en el último test definido en el 'Theory' de "PartC_AddSubscriber_SubscribersShouldReceiveTheRightUpdate" se muestra lo siguiente:

--> [InlineData( new []{0, 1, 0, 2, 0, 3, 4, 0, 5, 6, 0}, "There are too many tours.")]

Efectivamente hay muchos tours, pero luego revisé el archivo TestProblems.cs y en la función "GetAllTheConstraints()" se define al final de la lista la validación de precedencias, lo que hace que en la lista de handlers esta sea la primera en validarse:

image

Luego, los test como el del ejemplo debe fallar ya que, además de no cumplir con el límite de tours, tampoco cumple con la restricción de precedencia de pasar por el depot entre medio de pickup y delivery location. Mi propuesta es cambiar el orden de esta función al siguiente, cambiar Constraint.Precedence al comienzo de la lista:

image

Haciendo este cambio sencillo, todos los test me aparecen correctos, por lo que me parece que tengo razón en la observación hecha. Por favor coméntenme si mi razonamiento es correcto y si puedo hacer este cambio para aprobar la tarea.

Saludos,
Tomás Eduardo Ebensperger Buschmann

@RodrigoToroIcarte
Copy link
Owner

El código base está bien. Creo que el problema es que implementaste mal la cadena de responsabilidades en la parte a.

En concreto, creo que implementaste la cadena al revés. En el orden original, primero se debe chequear el número de tours y luego las precedencias (eso es lo que indica el GetAllTheConstraints()). Por eso cuando se cae por tours se notifica al usuario que "There are too many tours." y el programa termina (sin chequear si se cumplen las precedencias).

En tu caso, como implementaste la cadena al revés, primero chequeas precedencias. Notificas al usuario que no se cumplen las precedencia, y tu programa termina.

La solución no es modificar el GetAllTheCosntraints()... es crear bien la cadena en la parte a :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants