% Floor planning example with an optimal trade-off curve. % (a figure is generated) % % This is an example taken directly from the paper: % % A Tutorial on Geometric Programming (see pages 24-25) % by Boyd, Kim, Vandenberghe, and Hassibi. % % Solves the problem of configuring and placing rectangles such % that they do not overlap and that they minimize the area of the % bounding box. This code solves the specific instances given % in the GP tutorial. We have four rectangles with variable % width w_i and height h_i. They need to satisfy area and aspect % ration constraints. The GP is formulated as: % % minimize max(wa + wb, wc + wd)*(max(ha,hb) + max(hc,hd)) % s.t. wa*ha == area_a, wb*hb == area_b, ... % 1/alpha_max <= ha/wa <= alpha_max, ... % % where variables are rectangle widths w's and heights h's. % % Almir Mutapcic 02/02/06 % constants a = 0.2; b = 0.5; c = 1.5; d = 0.5; % GP variables gpvar wa wb wc wd ha hb hc hd % objective function is the area of the bounding box obj = max(wa + wb, wc + wd)*(max(ha,hb) + max(hc,hd)); % constraints (now impose the non-changing constraints) constr = [ ha*wa == a; hb*wb == b; hc*wc == c; hd*wd == d ]; % set the quiet flag (no solver reporting) global QUIET; QUIET = 1; % alpha is the changing parameter N = 20; alpha = linspace(1.01,4,N); min_area = []; status_history = {}; for n = 1:N % add constraints that depend on the changing parameter alpha constr(5) = 1/alpha(n) <= ha/wa; constr(6) = ha/wa <= alpha(n); constr(7) = 1/alpha(n) <= hb/wb; constr(8) = hb/wb <= alpha(n); constr(9) = 1/alpha(n) <= hc/wc; constr(10) = hc/wc <= alpha(n); constr(11) = 1/alpha(n) <= hd/wd; constr(12) = hd/wd <= alpha(n); [obj_value, solution, status] = gpsolve(obj, constr); min_area(n,1) = obj_value; status_history{end+1} = status; end % set the quiet flag (no solver reporting) global QUIET; QUIET = 1; plot(alpha,min_area); xlabel('alpha'); ylabel('min area'); axis([1 4 2.5 4]);