This document proposes a method for reasoning with optional and preferred requirements when finding solutions to requirements problems. It represents requirements using a goal model that distinguishes between mandatory and optional goals. It presents an algorithm to efficiently find solutions that satisfy as many optional goals as possible while respecting any user-expressed preferences among the goals. The algorithm identifies all admissible solutions, applies preferences to filter and identify preferred solutions, and uses local search methods like Tabu search to optimize sets of optional goals at a large scale. An implementation and case study on enterprise portals are also discussed.