Revision: 68637
                            
                                                            
                                    
                                        
Initial Code
                                    
                                    
                                                            
                                    
                                        
Initial URL
                                    
                                    
                                
                                                            
                                    
                                        
Initial Description
                                    
                                    
                                                            
                                    
                                        
Initial Title
                                    
                                    
                                                            
                                    
                                        
Initial Tags
                                    
                                    
                                
                                                            
                                    
                                        
Initial Language
                                    
                                    
                                                    
                        at January 31, 2015 07:23 by mikhailv
                            
                            Initial Code
// Example of using the class Pso
// Here we are optimising dimensions of a box so that neither
// of the side lenghes exceeds some limit
//    ____________
//   /           /|
//  /___________/ |
//  |           | |  Volume = a*b*c
//  |           | |  a < limit, b < limit, c < limit
//  |           | |
//  |           | |
//  |___________|/
#include"partswarmopt.h"
#include <iostream>
#include <fstream>
string createInputFile();
int main()
{
	string inpFileName = createInputFile();
	
	vector<int> position; // for debugging
	ofstream fout("output.txt", ios::out);
	const unsigned int n_part = 10; // number of particles
	const unsigned int n_gen = 200; // number of generations
	Pso box(inpFileName, n_part);
	box.initialize();
	for (unsigned int i = 0; i < n_gen - 1; i++)
	{
		box++;
		fout << box;
		// The code below is usefull for debugging purposes only
		for (unsigned int i = 1; i <= n_part; i++)
		{
			position = box.currentPosition(i);
			fout << "Position of particle " << i << ": ";
			for (int j = 0; j < position.size(); j++)
			{
				fout << position[j] << " ";
			}
			fout << endl;
		}
		fout << "Current best position: ";
		position = box.bestPosision();
		for (unsigned int i = 0; i < 3; i++)
		{
			fout << position[i] << " ";
		}
		fout << endl << endl << endl;
	}
	// system("pause");
	return 0;
}
double udm::Objective(const vector<double>& parameterValues)
{ // Volume of a box = a*b*c
	double ans = 1;
	for (unsigned int i = 0; i < parameterValues.size(); i++)
	{
		ans *= parameterValues[i];
	}
	return -ans;
}
vector<double> udm::Constraints(const vector<double>& parameterValues)
{ // Box sides' lengthes are limited
	double limit = 14;
	vector<double> ans;
	double penalty;
	if (parameterValues[0] > limit)
	{
		penalty = (parameterValues[0] - limit) / (parameterValues[0] + limit);
		ans.push_back(penalty);
	}
	if (parameterValues[1] > limit)
	{
		penalty = (parameterValues[1] - limit) / (parameterValues[1] + limit);
		ans.push_back(penalty);
	}
	if (parameterValues[2] > limit)
	{
		penalty = (parameterValues[2] - limit) / (parameterValues[2] + limit);
		ans.push_back(penalty);
	}
	return ans;
}
string createInputFile()
{ // Creates file with possible side lengthes
	string filename = "boxsides.txt";
	ofstream file(filename, ios::out);
	for (int j = 1; j <= 3; j++)
	{
		file << 20 << endl;
		for (int i = 0; i < 20; i++)
		{
			file << (i + 1)*2 << " ";
		}
		file << endl;
	}
	return filename;
}
                                Initial URL
Initial Description
Optimising dimensions of a box
Initial Title
Example using PSO
Initial Tags
Initial Language
C++