Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %%Variable Declarations
- count = 0;
- numShips = 20;
- numFeatures = 7;
- numPlanets = 4;
- fMatrix = zeros(numFeatures,numShips);
- AMatrix = zeros(numPlanets,numFeatures);
- gMatrix = zeros(numPlanets,numShips);
- numPermutations = 10;
- kConstant = 0.25;
- errorFormula = 0;
- errorMatrix = zeros(numFeatures,numShips);
- errorVector = zeros(numPermutations * numShips, 1);
- %%Read-in training data
- fid = fopen('trainingdata.txt');
- trainingMatrix = textscan(fid, '%s%s%f32%f32%s%f32%s');
- fclose(fid);
- trainingNameVector = trainingMatrix{1};
- trainingPlanetVector = trainingMatrix{2};
- trainingWarpVector = trainingMatrix{3};
- trainingFreqVector = trainingMatrix{4};
- trainingColorVector = trainingMatrix{5};
- trainingRatioVector = trainingMatrix{6};
- trainingActionVector = trainingMatrix{7};
- %%Read-in noisy data
- fid = fopen('noisydata.txt');
- noisyMatrix = textscan(fid, '%s%s%s%s%s%s%s');
- fclose(fid);
- %%Put data into vectors based on features
- noisyNameVector = noisyMatrix{1};
- noisyPlanetVector = noisyMatrix{2};
- noisyWarpVector = noisyMatrix{3};
- noisyFreqVector = noisyMatrix{4};
- noisyColorVector = noisyMatrix{5};
- noisyRatioVector = noisyMatrix{6};
- noisyActionVector = noisyMatrix{7};
- %%Feature training
- for i = 1:numShips
- %%Klingon Features
- if strcmp(trainingColorVector{i},'Black')
- fMatrix(5,i) = 1;
- elseif strcmp(trainingColorVector{i},'DarkGray')
- fMatrix(5,i) = 1;
- elseif trainingFreqVector(i) > 1000 && trainingFreqVector(i) < 1010
- fMatrix(4,i) = 1;
- end
- %%Romulan Features
- if strcmp(trainingColorVector{i},'Green')
- fMatrix(5,i) = 1;
- elseif strcmp(trainingColorVector{i},'DarkGreen')
- fMatrix(5,i) = 1;
- elseif ~strcmp(trainingColorVector{i},'DarkGray') && trainingWarpVector(i) > 7.1
- fMatrix(3,i) = 0.5;
- elseif ~strcmp(trainingColorVector{i},'Black') && trainingFreqVector(i) < 1000
- fMatrix(4,i) = 0.5;
- elseif ~strcmp(trainingColorVector{i},'DarkGray') && trainingFreqVector(i) < 1000
- fMatrix(4,i) = 0.5;
- end
- %%Antarean Features
- if strcmp(trainingColorVector{i},'Pink')
- fMatrix(5,i) = 1;
- elseif strcmp(trainingColorVector{i},'Yellow')
- fMatrix(5,i) = 1;
- elseif strcmp(trainingColorVector{i},'Orange')
- fMatrix(5,i) = 1;
- elseif findstr('A',trainingNameVector{i})
- fMatrix(1,i) = 1;
- elseif findstr('E',trainingNameVector{i})
- fMatrix(1,i) = 1;
- elseif findstr('0' || '1' || '2' || '3' || '4' || '5' || '6' || '7' || '8' || '9',trainingNameVector{i})
- fMatrix(1,i) = 1;
- end
- %%Federation Features
- if strcmp(trainingColorVector{i},'White')
- fMatrix(5,i) = 1;
- elseif trainingWarpVector(i) < 6.8 && trainingFreqVector(i) > 1040
- fMatrix(3,i) = 1;
- elseif strcmp('LightGray',trainingColorVector{i}) && trainingFreqVector(i) > 1040
- fMatrix(4,i) = 1;
- elseif strcmp('LightBlue',trainingColorVector{i}) && trainingFreqVector(i) > 1040
- fMatrix(4,i) = 1;
- elseif strcmp('LightColor',trainingColorVector{i}) && trainingFreqVector(i) > 1040
- fMatrix(4,i) = 1;
- end
- end
- %%Create g Matrix
- for i = 1:numShips
- if i < 6
- gMatrix(1,i) = 1;
- elseif i < 11 && i > 5
- gMatrix(2,i) = 1;
- elseif i < 16 && i > 10
- gMatrix(3,i) = 1;
- elseif i < 21 && i > 15
- gMatrix(4,i) = 1;
- end
- end
- for i = 1:numPermutations
- %%Determine the order in which variables will be extracted
- order = randperm(numShips);
- for j = 1:numShips
- %%Keep track of the position in the total error vector
- count = count + 1;
- %%Extract corresponding vectors f and g based on order
- f = fMatrix(:,order(j));
- g = gMatrix(:,order(j));
- %%Find g' based on the current A
- gPrime = AMatrix * f;
- %%Calculate the error based on the given formula
- errorFormula = kConstant * (g - gPrime) * f';
- %%Make modifications to A based on the results from the formula
- AMatrix = AMatrix + errorFormula;
- %%Create a matrix of g'
- gPrimeMatrix = AMatrix * fMatrix;
- %%Calculate a matrix of errors based on what g is supposed to be
- %%compared to what we have our g'
- errorMatrix = gMatrix - gPrimeMatrix;
- %%Calculate total error and get the average
- totalError = 0;
- for k = 1:numShips
- totalError = totalError + norm(errorMatrix(:,k));
- end
- errorVector(count) = totalError / numShips;
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement