Family Budget
Contents
Problem description
The mother of a family wishes to use her son’s computer. On the internet she has found optimization software and would now like to formulate a mathematical model to help plan their annual budget. She has prepared a list of the monthly expenses and receipts of money. Every month the expenses for living are $ 550. The monthly rent for the apartment is $ 630. She also budgets $ 135 for telephone every two months, $ 850 for gas and electricity bills every six months, $ 340 per month for the car and $ 100 of tax every four months. Her receipts of money are a monthly payment of $ 150 of state allowance for families with dependent children and a net salary of $ 1900 per month. She knows that she pays at least $ 165 for leisure every month (subscription to the swimming pool for the older children, football club for the youngest, gym for herself) but she would like to spend more (restaurant, cinema, holidays). How should the budget be balanced all through the year to maximize the money available for leisure?
Variables
costs Various costs costfreq Frequency of the costs income Various incomes incomefreq Frequency of the income minhobby Mimial cost for hobbies
Reference
Applications of optimization... Gueret, Prins, Seveaux
% Marcus Edvall, Tomlab Optimization Inc, E-mail: tomlab@tomopt.com % Copyright (c) 2005-2009 by Tomlab Optimization Inc., $Release: 7.2.0$ % Written Oct 7, 2005. Last modified Apr 8, 2009.
Problem setup
costs = [550 630 135 850 340 100]'; costfreq = [ 1 1 2 6 1 4]'; income = [150 1900]'; incomefreq = [ 1 1]'; minhobby = 165; m = 12; % Hobby, months hobby = tom('hobby',m,1); save = tom('save',m,1); % No variables are integer. bnds = {hobby >= minhobby, save >= 0}; % Months constraints incomefreqcount = incomefreq; costfreqcount = costfreq; upper = zeros(m,1); value = 0; for i=1:m for j=1:length(incomefreq) if incomefreq(j) == i value = value + income(j); incomefreq(j) = incomefreq(j) + incomefreqcount(j); end end for j=1:length(costfreq) if costfreq(j) == i value = value - costs(j); costfreq(j) = costfreq(j) + costfreqcount(j); end end upper(i,1) = value; value = 0; end con1 = {hobby(1) + save(1) <= upper(1)}; con2 = {hobby(2:end) + save(2:end) - save(1:end-1) <= upper(2:end)}; % Objective objective = -sum(hobby); constraints = {bnds, con1, con2}; options = struct; options.solver = 'cplex'; options.name = 'Family Budget'; sol = ezsolve(objective,constraints,[],options); PriLev = 1; if PriLev > 0 m = 12 ; % number of months leisure = sol.hobby; save = sol.save; disp('Money for leisure and for savings per month') for i = 1:m, disp(['month ' num2str(i) ', leisure ' num2str(leisure(i)) ', save ' num2str(save(i))]) end disp(['total leisure this year: ' num2str(sum(leisure))]) disp(['total to save this year: ' num2str(sum(save)) ]) end % MODIFICATION LOG % % 051201 med Created. % 060116 per Added documentation. % 060117 per Minor change of documentation. % 060125 per Moved disp to end % 090308 med Converted to tomSym
Problem type appears to be: lp ===== * * * =================================================================== * * * TOMLAB - Tomlab Optimization Inc. Development license 999001. Valid to 2010-02-05 ===================================================================================== Problem: --- 1: Family Budget f_k -3550.000000000000000000 f(x_0) 0.000000000000000000 Solver: CPLEX. EXIT=0. INFORM=1. CPLEX Dual Simplex LP solver Optimal solution found Money for leisure and for savings per month month 1, leisure 165, save 365 month 2, leisure 165, save 595 month 3, leisure 165, save 960 month 4, leisure 165, save 1090 month 5, leisure 165, save 1455 month 6, leisure 165, save 835 month 7, leisure 165, save 1200 month 8, leisure 165, save 1330 month 9, leisure 1735, save 125 month 10, leisure 165, save 355 month 11, leisure 165, save 720 month 12, leisure 165, save 0 total leisure this year: 3550 total to save this year: 9030