Firefly algorithm to solve non-convex economic dispatch problems with generator constraints and heuristic load patterns