fines_ore_blending_constraint1

PURPOSE ^

Constructs the blending constraint for ore fines

SYNOPSIS ^

function [A_finesOregrade b_finesOreUgrade] = fines_ore_blending_constraint1(Blocks120, numOfPeriods,MaxfinesOre, MinfinesOre)

DESCRIPTION ^

 Constructs the blending constraint for ore fines 
--------------------------------------------------------------------------
 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 blending constraint for ore fines
0002 %--------------------------------------------------------------------------
0003 % Date: July 30, 2010, ver01
0004 % By: Eugene Ben-Awuah
0005 %--------------------------------------------------------------------------
0006 
0007 function [A_finesOregrade b_finesOreUgrade] = fines_ore_blending_constraint1...
0008                                              (Blocks120, numOfPeriods,... 
0009                                               MaxfinesOre, MinfinesOre)
0010 
0011 
0012 [numBlocks n] = size([Blocks120.EBV]');
0013 
0014 %vectors containing the relevant element and tonnage
0015 finesOreGrade1 = [Blocks120.finesGradeOre];
0016 OreTonnage = [Blocks120.blockFinesOre]/100;
0017 
0018 %initialize the finesOreGrade vector by pre-allocating memory to increase speed
0019 finesOreGrade2=zeros(1,numBlocks);
0020 finesOreGrade3=zeros(1,numBlocks);
0021 
0022 %calculate the maximum and minimum grade constraint vectors based on the formula (refer Yashar's formulation:
0023 %finesOreGradeMax=((finesOreGrade1(1,iBlocks)-MaxfinesOre)*OreTonnage(1,iBlocks))
0024 %finesOreGradeMin=((MinfinesOre-finesOreGrade1(1,iBlocks))*OreTonnage(1,iBlocks))
0025 for iBlocks=1:numBlocks
0026     finesOreGrade2(1,iBlocks)=((finesOreGrade1(1,iBlocks)-MaxfinesOre).*OreTonnage(1,iBlocks));  
0027     finesOreGrade3(1,iBlocks)=((MinfinesOre-finesOreGrade1(1,iBlocks)).*OreTonnage(1,iBlocks));
0028 end
0029  
0030 %pre-allocate memory and create maximum and minimum grade constraint matrix
0031 finesOreGradeMax = zeros(numOfPeriods,numBlocks*numOfPeriods);
0032 finesOreGradeMin = zeros(numOfPeriods,numBlocks*numOfPeriods);
0033 for iPeriods = 1:numOfPeriods
0034     finesOreGradeMax(iPeriods,((numBlocks*(iPeriods-1)+1):iPeriods*numBlocks))...
0035     = finesOreGrade2(1,:);
0036 
0037     finesOreGradeMin(iPeriods,((numBlocks*(iPeriods-1)+1):iPeriods*numBlocks))...
0038     = finesOreGrade3(1,:);
0039 end
0040 
0041 %create maximum and minimum grade constraint matrix with size (T, N*T) for
0042 %each block-period decision variable and size (T,T) period decision variable
0043 %totalling (T, T*Variables)
0044 [m,n] = size(finesOreGradeMax);
0045 A_finesOregradeMax = [zeros(m, numBlocks*numOfPeriods)...
0046                      finesOreGradeMax, 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_finesOregradeMin = [zeros(m, numBlocks*numOfPeriods)...
0051                      finesOreGradeMin, 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_finesOregrade = [A_finesOregradeMax; A_finesOregradeMin];
0056 
0057 %create the target for the grade constraint matrix which is a (2T,1) matrix
0058 [m,n] = size(A_finesOregrade);
0059 b_finesOreUgrade = zeros(m,1);
0060 
0061 %convert to a sparse matrix
0062 A_finesOregrade = sparse(A_finesOregrade);
0063 b_finesOreUgrade = sparse(b_finesOreUgrade);
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_finesOregrade(i,:));     
0080 end
0081     
0082 for i = 1:m   
0083 normA = A_gradeNormVector(i,1); 
0084 A_finesOregrade(i,:) = A_finesOregrade(i,:)/normA;
0085 end
0086 
0087 A_finesOregrade;
0088 
0089 end

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