I think one key to implementing GRASP or any other heuristic optimization for this problem is to decide how to encode the rectangle placement.
One possibility is to simply give an ordered list of rectangles and make the "placement function" put each new one either to the right side of the prior, or, if it won't fit there, to the left and above all priors on the same sheet, or, if it won't fit there, in the lower left corner of a new sheet. This is not terribly efficient use of space but it makes for a reasonably fast decoding. The objective function could then use this placement to determine wastage.
For actual optimization a particle swarm method (PSO), differential evolution (DE) or other evolutionary algorithm (EA) approach, GRASP, or other methods might be employed. If PSO or an EA is used then there is also the issue of how to create new orderings from old ones (in effect, how to create a new permutation from existing permutations). Suffice it to say that there are various ways one might go about this.
The following might be useful both for formulating an encoding and for solver possibilities.
R. Chiong and O. Koon Bend. A Comparison between genetic algorithms and evolutionary programming based on cutting stock problem. Engineering Letters 14:1, 2007.
J. Puchinger, G. Raidl, G. Koller. Solving a real-world cutting problem. Evolutionary Computation in Combinatorial Optimization
Lecture Notes in Computer Science Volume 3004, 2004, pp 165-176.
C. Oliviera, P. Pardalos, M. Resende. GRASP with path-relinking for the quadratic assignment problem. LCNS 3059, 2004. Earlier version (2003) in MIC2003: The Fifth Metaheuristics International Conference.