allocate() respects ratio keys