better evaluation algo with custom weights and rules