0001
0002
0003
0004
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
0014 bitumenGrade1 = [Blocks120.bitumenGradeOre];
0015 OreTonnage = [Blocks120.oreTonnage];
0016
0017
0018 bitumenGrade2=zeros(1,numBlocks);
0019 bitumenGrade3=zeros(1,numBlocks);
0020
0021
0022
0023
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
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
0041
0042
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
0058 [m,n] = size(A_grade);
0059 b_Ugrade = zeros(m,1);
0060
0061
0062 A_grade = sparse(A_grade);
0063 b_Ugrade = sparse(b_Ugrade);
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
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