define the class of problems you're trying to optimize, say as "minimizing the MakeTime?s of 5 jobs with particular requirements and durations, given 3 machines they all have to share";
decide on how to represent the prospective solutions and how they would be used to select new ones as search progresses, for instance you might choose to represent schedules in memory as a sort of GanttChart and allow crossover between them;
decide when to quit, for instance you might choose to proceed with search until no further improvements are found in 1000 consecutive tries.
When it turns out that these choices don't really do any better than random guessing, it's time to do some MetaOptimization. -- BillTozier