grade_blending_constraint1

PURPOSE ^

Constructs the bitumen grade blending constraint for ore

SYNOPSIS ^

function [A_grade b_Ugrade] = grade_blending_constraint1(Blocks120,numOfPeriods, Maxgrade, Mingrade)

DESCRIPTION ^

 Constructs the bitumen grade blending constraint for ore 
--------------------------------------------------------------------------
 Date: July 30, 2010, ver01
 By: Eugene Ben-Awuah
--------------------------------------------------------------------------

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 % Constructs the bitumen grade blending constraint for ore
0002 %--------------------------------------------------------------------------
0003 % Date: July 30, 2010, ver01
0004 % By: Eugene Ben-Awuah
0005 %--------------------------------------------------------------------------
0006 
0007 function [A_grade b_Ugrade] = grade_blending_constraint1(Blocks120,...
0008                               numOfPeriods, Maxgrade, Mingrade)
0009 
0010 
0011 [numBlocks n] = size([Blocks120.EBV]');
0012 
0013 %vectors containing the relevant elements
0014 bitumenGrade1 = [Blocks120.bitumenGradeOre];
0015 OreTonnage = [Blocks120.oreTonnage];
0016 
0017 %initialize the bitumenGrade vector by pre-allocating memory to increase speed
0018 bitumenGrade2=zeros(1,numBlocks);
0019 bitumenGrade3=zeros(1,numBlocks);
0020 
0021 %calculate the maximum and minimum grade constraint vectors based on the formula (refer Yashar's formulation:
0022 %bitumenGradeMax=((bitumenGrade1(1,iBlocks)-Maxgrade)*OreTonnage(1,iBlocks))
0023 %bitumenGradeMin=((Mingrade-bitumenGrade1(1,iBlocks))*OreTonnage(1,iBlocks))
0024 for iBlocks=1:numBlocks
0025     bitumenGrade2(1,iBlocks)=((bitumenGrade1(1,iBlocks)-Maxgrade)*OreTonnage(1,iBlocks));  
0026     bitumenGrade3(1,iBlocks)=((Mingrade-bitumenGrade1(1,iBlocks))*OreTonnage(1,iBlocks));
0027 end
0028  
0029 %pre-allocate memory and create maximum and minimum grade constraint matrix
0030 bitumenGradeMax = zeros(numOfPeriods,numBlocks*numOfPeriods);
0031 bitumenGradeMin = zeros(numOfPeriods,numBlocks*numOfPeriods);
0032 for iPeriods = 1:numOfPeriods
0033     bitumenGradeMax(iPeriods,((numBlocks*(iPeriods-1)+1):iPeriods*numBlocks))...
0034     = bitumenGrade2(1,:);
0035 
0036     bitumenGradeMin(iPeriods,((numBlocks*(iPeriods-1)+1):iPeriods*numBlocks))...
0037     = bitumenGrade3(1,:);
0038 end
0039 
0040 %create maximum and minimum grade constraint matrix with size (T, N*T) for
0041 %each block-period decision variable and size (T,T) period decision variable
0042 %totalling (T, T*Variables)
0043 
0044 [m,n] = size(bitumenGradeMax);
0045 A_gradeMax = [zeros(m, numBlocks*numOfPeriods)...
0046              bitumenGradeMax, zeros(m, numBlocks*numOfPeriods)...
0047              zeros(m, numBlocks*numOfPeriods)...
0048              zeros(m,m), zeros(m,m), zeros(m,m), zeros(m,m)];
0049          
0050 A_gradeMin = [zeros(m, numBlocks*numOfPeriods)...
0051              bitumenGradeMin, zeros(m, numBlocks*numOfPeriods)...
0052              zeros(m, numBlocks*numOfPeriods)...
0053              zeros(m,m), zeros(m,m), zeros(m,m), zeros(m,m)];         
0054 
0055 A_grade = [A_gradeMax; A_gradeMin];
0056 
0057 %create the target for the grade constraint matrix which is a (2T,1) matrix
0058 [m,n] = size(A_grade);
0059 b_Ugrade = zeros(m,1);
0060 
0061 %convert to a sparse matrix
0062 A_grade = sparse(A_grade);
0063 b_Ugrade = sparse(b_Ugrade);
0064 
0065 % the mulitplier vector in the constraint matrix have different sizes
0066 % and units. (some are tonnage some are grade....). It is necessary to
0067 % transform the constraints matrix in a way that it unit less to be
0068 % solved by the MIP code.
0069 
0070 % divide each row vector by its norm [A(i,:)* A(i,:)']^1/2
0071 % A_miningNormVector(m,1) is vertical vector holding the respective
0072 % norm of each row of the A_mining matrix
0073 
0074 %b_Ugrade is all zero so doesn't need normalizing in cases where b_U
0075 %and b_L have values greater than zero they need to be normailized as
0076 %well.
0077 
0078 for i = 1:m  
0079     A_gradeNormVector(i,1) = norm(A_grade(i,:));     
0080 end
0081     
0082 for i = 1:m   
0083 normA = A_gradeNormVector(i,1); 
0084 A_grade(i,:) = A_grade(i,:)/normA;
0085 end
0086 
0087 A_grade;
0088 
0089 end

Generated on Fri 30-Jul-2010 16:56:05 by m2html © 2003