Choice of Loans

Contents

Problem description

Mr Chic, director of a chain of shops selling clothes, wishes to open three new shops: one in London, one in Munich, and one in Rome. To open a new shop costs respectively $ 2.5 million, $ 1 million and $ 1.7 million. To finance his project, he calls at three different banks.

Rates offered by the banks for the different projects

+------+------+------+----+
|      |London|Munich|Rome|
+------+------+------+----+
|Bank 1| 5.0% | 6.5% |6.1%|
|Bank 2| 5.2% | 6.2% |6.2%|
|Bank 3| 5.5% | 5.8% |6.5%|
+------+------+------+----+

Depending on the location of the shops and the evaluation of the related risks, each bank decides to finance at most $ 3 million over 8 years with different interest rates for the shops. Determine the amount to borrow from each bank for financing each shop in order to minimize the total expenses of Mr Chic.

Variables

rates                      The rates
costs                      Cost per site
maxloan                    Max loan per bank
loanlength                 Length of the loan in years

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

rates = [ 5.0 6.5 6.1 ;...
    5.2 6.2 6.2 ;...
    5.5 5.8 6.5 ];

costs       = [2.5 1.0 1.7]'*1e6;
maxloan     = 3e6;
loanlength  = 8;

b = size(rates,1);
s = size(rates,2);

borrow = tom('borrow',b,s);

% No variables are binary.
bnds = {0 <= borrow};

% Shop constraints
con1 = {sum(borrow,1)' == costs};

% Bank constraints
con2 = {sum(borrow,2) <= maxloan};

% Objective
rates = rates/100;
objective = sum(sum(borrow.*(rates./(1-(1+rates).^(-loanlength)))));

constraints = {bnds, con1, con2};
options = struct;
options.solver = 'cplex';
options.name   = 'Depot Location';
sol = ezsolve(objective,constraints,[],options);

PriLev = 1;
if PriLev > 0
    temp   = sol.borrow;
    for i = 1:s,
        site = temp(:,i);
        idx  = find(site);
        disp(['To finance shop at site ' num2str(i)])
        for j = 1:length(idx),
            disp(['  take a loan of ' num2str(site(idx(j))) ...
                ' in bank ' num2str(idx(j))])
        end
    end
end

% MODIFICATION LOG
%
% 051130 med   Created.
% 060116 per   Added documentation.
% 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: Depot Location                 f_k  822180.656176676160000000
                                              f(x_0)      0.000000000000000000

Solver: CPLEX.  EXIT=0.  INFORM=1.
CPLEX Dual Simplex LP solver
Optimal solution found

FuncEv    4 Iter    4 
To finance shop at site 1
  take a loan of 2500000 in bank 1
To finance shop at site 2
  take a loan of 1000000 in bank 3
To finance shop at site 3
  take a loan of 500000 in bank 1
  take a loan of 1200000 in bank 2