{"action":"created","issue":{"url":"https://api.github.com/repos/chocoteam/choco-solver/issues/483","repository_url":"https://api.github.com/repos/chocoteam/choco-solver","labels_url":"https://api.github.com/repos/chocoteam/choco-solver/issues/483/labels{/name}","comments_url":"https://api.github.com/repos/chocoteam/choco-solver/issues/483/comments","events_url":"https://api.github.com/repos/chocoteam/choco-solver/issues/483/events","html_url":"https://github.com/chocoteam/choco-solver/issues/483","id":196909510,"number":483,"title":"significant slowdown of incremental cumulative in choco4 versions compared to choco3","user":{"login":"gregy4","id":5640112,"avatar_url":"https://avatars.githubusercontent.com/u/5640112?v=3","gravatar_id":"","url":"https://api.github.com/users/gregy4","html_url":"https://github.com/gregy4","followers_url":"https://api.github.com/users/gregy4/followers","following_url":"https://api.github.com/users/gregy4/following{/other_user}","gists_url":"https://api.github.com/users/gregy4/gists{/gist_id}","starred_url":"https://api.github.com/users/gregy4/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gregy4/subscriptions","organizations_url":"https://api.github.com/users/gregy4/orgs","repos_url":"https://api.github.com/users/gregy4/repos","events_url":"https://api.github.com/users/gregy4/events{/privacy}","received_events_url":"https://api.github.com/users/gregy4/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":3,"created_at":"2016-12-21T11:27:13Z","updated_at":"2016-12-21T13:51:24Z","closed_at":null,"body":"This week I was moving my code from choco 3.3.3 version to choco 4 version. After conversion I experienced significant slowdown of my testing problem - about 30% compared to choco3.\r\n\r\nThanks to a profiler I probably found a reason for that. Methods PropGraphCumulative.propagate(int) and PropGraphCumulative.propagate(int, int) takes much more time than in choco3. In both cases this is caused by self time of methods, in choco3 the methods took nearly no time. With methods called inside it means in my case that first method takes twice much time, second method is even worse.\r\n\r\nI found commit that on April 9th 2016 named 'update cumulative' that is probably reason for this slowdown."},"comment":{"url":"https://api.github.com/repos/chocoteam/choco-solver/issues/comments/268527320","html_url":"https://github.com/chocoteam/choco-solver/issues/483#issuecomment-268527320","issue_url":"https://api.github.com/repos/chocoteam/choco-solver/issues/483","id":268527320,"user":{"login":"jgFages","id":1172247,"avatar_url":"https://avatars.githubusercontent.com/u/1172247?v=3","gravatar_id":"","url":"https://api.github.com/users/jgFages","html_url":"https://github.com/jgFages","followers_url":"https://api.github.com/users/jgFages/followers","following_url":"https://api.github.com/users/jgFages/following{/other_user}","gists_url":"https://api.github.com/users/jgFages/gists{/gist_id}","starred_url":"https://api.github.com/users/jgFages/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jgFages/subscriptions","organizations_url":"https://api.github.com/users/jgFages/orgs","repos_url":"https://api.github.com/users/jgFages/repos","events_url":"https://api.github.com/users/jgFages/events{/privacy}","received_events_url":"https://api.github.com/users/jgFages/received_events","type":"User","site_admin":false},"created_at":"2016-12-21T13:51:24Z","updated_at":"2016-12-21T13:51:24Z","body":"It was based on minizinc instances (there are many problems related to scheduling, similar from a global view but the best way to solve them can be quite different). Some require more filtering, some less...\r\n\r\nThe main difference between the two versions is the propagation configuration (algorithms are more or less the same). In the old version, propagators where called less often (i.e. the propagation stops before achieving a fix point). In particular, the getPropagationConditions method was different: it skipped half of propagations related to bound modifications (which explains why you now have twice more calls). This was faster on problems with many variables and where there was no much deductions to perform anyway (if you have nothing to filter, there is no need to call the algorithm). However, it was also counter productive on problems where missing one deduction could lead to trashing. \r\n\r\nThe new approach skips much less propagations. Whether or not these new propagations are profitable depends on the problem. \r\n\r\nIf you want to contribute to improve it, I believe the best thing to do is to create a new propagator that would ensure the fixpoint (inside itself). This would enable to use only one propagator instead of the two we currently use to make a ping pong. It would save time and be much \"cleaner\" than the old trick."}}
{"actor":{"display_login":"jgFages"}}