// Permutation.java
//
// Author:
// Antonio J. Nebro <antonio@lcc.uma.es>
// Juan J. Durillo <durillo@lcc.uma.es>
//
// Copyright (c) 2011 Antonio J. Nebro, Juan J. Durillo
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package jmetal.encodings.variable;
import jmetal.core.Variable;
/**
* Class implementing a permutation of integer decision encodings.variable
*/
public class Permutation extends Variable {
/**
* Stores a permutation of <code>int</code> values
*/
public int [] vector_;
/**
* Stores the length of the permutation
*/
public int size_;
/**
* Constructor
*/
public Permutation() {
size_ = 0;
vector_ = null;
} //Permutation
/**
* Constructor
* @param size Length of the permutation
*/
/*
public Permutation(int size) {
setVariableType(VariableType_.Permutation) ;
size_ = size;
vector_ = new int[size_];
int [] randomSequence = new int[size_];
for(int k = 0; k < size_; k++){
int num = PseudoRandom.randInt();
randomSequence[k] = num;
vector_[k] = k;
}
// sort value and store index as fragment order
for(int i = 0; i < size_-1; i++){
for(int j = i+1; j < size_; j++) {
if(randomSequence[i] > randomSequence[j]){
int temp = randomSequence[i];
randomSequence[i] = randomSequence[j];
randomSequence[j] = temp;
temp = vector_[i];
vector_[i] = vector_[j];
vector_[j] = temp;
}
}
}
} //Permutation
* */
/**
* Constructor
* @param size Length of the permutation
* This constructor has been contributed by Madan Sathe
*/
public Permutation(int size) {
size_ = size;
vector_ = new int[size_];
java.util.ArrayList<Integer> randomSequence = new
java.util.ArrayList<Integer>(size_);
for(int i = 0; i < size_; i++)
randomSequence.add(i);
java.util.Collections.shuffle(randomSequence);
for(int j = 0; j < randomSequence.size(); j++)
vector_[j] = randomSequence.get(j);
} // Constructor
/**
* Copy Constructor
* @param permutation The permutation to copy
*/
public Permutation(Permutation permutation) {
size_ = permutation.size_;
vector_ = new int[size_];
System.arraycopy(permutation.vector_, 0, vector_, 0, size_);
} //Permutation
/**
* Create an exact copy of the <code>Permutation</code> object.
* @return An exact copy of the object.
*/
public Variable deepCopy() {
return new Permutation(this);
} //deepCopy
/**
* Returns the length of the permutation.
* @return The length
*/
public int getLength(){
return size_;
} //getNumberOfBits
/**
* Returns a string representing the object
* @return The string
*/
public String toString(){
String string ;
string = "" ;
for (int i = 0; i < size_ ; i ++)
string += vector_[i] + " " ;
return string ;
} // toString
} // Permutation