first part of partial signature evaluation

This commit is contained in:
Johann Dreo 2022-10-18 11:12:38 +02:00 committed by nojhan
commit bfce997ce8
2 changed files with 55 additions and 3 deletions

View file

@ -49,6 +49,43 @@ class moBinaryPartitionSwapNeighbor :
assert(selected_nb > 0); assert(selected_nb > 0);
} }
/** Default constructor.
*
* Will NOT ensure that the dimension of the partition does not change.
*/
moBinaryPartitionSwapNeighbor() :
selected_nb(0)
#ifndef NDEBUG
, is_set(false)
#endif
{
// Invalid fitness by default.
}
/** Copy constructor.
*/
moBinaryPartitionSwapNeighbor( const moBinaryPartitionSwapNeighbor<EOT>& other) :
selected_nb(other.selected_nb )
#ifndef NDEBUG
, is_set(other.is_set)
#endif
{
this->fitness(other.fitness());
}
/** Default assignment operator.
*/
moBinaryPartitionSwapNeighbor<EOT>& operator=(
const moBinaryPartitionSwapNeighbor<EOT>& other)
{
this->fitness(other.fitness());
this->selected_nb = other.selected_nb;
#ifndef NDEBUG
this->is_set = other.is_set;
#endif
return *this;
}
/** Apply the currently stored move. /** Apply the currently stored move.
* *
* That is: reject one atom and select one other. * That is: reject one atom and select one other.
@ -58,7 +95,9 @@ class moBinaryPartitionSwapNeighbor :
// Swap the two atoms. // Swap the two atoms.
solution.reject(this->reject); solution.reject(this->reject);
solution.select(this->select); solution.select(this->select);
#ifndef NDEBUG
assert(solution.selected.size() == this->selected_nb); assert(solution.selected.size() == this->selected_nb);
#endif
solution.invalidate(); solution.invalidate();
} }
@ -71,7 +110,9 @@ class moBinaryPartitionSwapNeighbor :
assert(is_set); assert(is_set);
solution.reject(this->select); solution.reject(this->select);
solution.select(this->reject); solution.select(this->reject);
#ifndef NDEBUG
assert(solution.selected.size() == this->selected_nb); assert(solution.selected.size() == this->selected_nb);
#endif
solution.invalidate(); solution.invalidate();
} }
@ -116,13 +157,22 @@ class moBinaryPartitionSwapNeighbor :
<< " +" << select; << " +" << select;
} }
void size(size_t _selected_nb) {
assert(_selected_nb > 0);
this->selected_nb = _selected_nb;
}
size_t size() const {
return this->selected_nb;
}
#ifndef NDEBUG #ifndef NDEBUG
public: public:
#else #else
protected: protected:
#endif #endif
/** Fixed dimension of the handled solutions. */ /** Fixed dimension of the handled solutions. */
const size_t selected_nb; size_t selected_nb;
/** Selected atom. */ /** Selected atom. */
AtomType select; AtomType select;

View file

@ -64,6 +64,7 @@ class moBinaryPartitionSwapNeighborhood : public moNeighborhood<moBinaryPartitio
AtomType in = selected(from, i_select); AtomType in = selected(from, i_select);
AtomType out = rejected(from, j_reject); AtomType out = rejected(from, j_reject);
to.set(in, out); to.set(in, out);
to.size(from.selected.size());
} }
/** Point to the next neighbor. */ /** Point to the next neighbor. */
@ -90,6 +91,7 @@ class moBinaryPartitionSwapNeighborhood : public moNeighborhood<moBinaryPartitio
selected(from, i_select), selected(from, i_select),
rejected(from, j_reject) rejected(from, j_reject)
); );
to.size(from.selected.size());
} }
/** Returns true if there is more neighbors to be enumerated. */ /** Returns true if there is more neighbors to be enumerated. */