silly little child finder
parent
a43922589f
commit
766befd949
|
@ -1,5 +1,5 @@
|
|||
cmake_minimum_required(VERSION 3.25)
|
||||
project(blt-gp VERSION 0.0.142)
|
||||
project(blt-gp VERSION 0.0.143)
|
||||
|
||||
include(CTest)
|
||||
|
||||
|
|
|
@ -60,6 +60,13 @@ namespace blt::gp
|
|||
{
|
||||
using iter_type = std::vector<op_container_t>::const_iterator;
|
||||
public:
|
||||
struct child_t
|
||||
{
|
||||
blt::ptrdiff_t start;
|
||||
// one past the end
|
||||
blt::ptrdiff_t end;
|
||||
};
|
||||
|
||||
[[nodiscard]] inline std::vector<op_container_t>& get_operations()
|
||||
{
|
||||
return operations;
|
||||
|
@ -117,6 +124,7 @@ namespace blt::gp
|
|||
|
||||
bool check(gp_program& program, void* context) const;
|
||||
|
||||
void find_child_extends(gp_program& program, std::vector<child_t>& vec, blt::size_t parent_node, blt::size_t argc) const;
|
||||
blt::ptrdiff_t find_endpoint(blt::gp::gp_program& program, blt::ptrdiff_t start) const;
|
||||
blt::ptrdiff_t find_parent(blt::gp::gp_program& program, blt::ptrdiff_t start) const;
|
||||
|
||||
|
|
20
src/tree.cpp
20
src/tree.cpp
|
@ -340,6 +340,26 @@ namespace blt::gp
|
|||
}
|
||||
}
|
||||
|
||||
void tree_t::find_child_extends(gp_program& program, std::vector<child_t>& vec, blt::size_t parent_node, blt::size_t argc) const
|
||||
{
|
||||
while (vec.size() < argc)
|
||||
{
|
||||
auto current_point = vec.size();
|
||||
child_t prev{};
|
||||
if (current_point == 0)
|
||||
{
|
||||
// first child.
|
||||
prev = {static_cast<blt::ptrdiff_t>(parent_node + 1),
|
||||
find_endpoint(program, static_cast<blt::ptrdiff_t>(parent_node + 1))};
|
||||
vec.push_back(prev);
|
||||
continue;
|
||||
} else
|
||||
prev = vec[current_point - 1];
|
||||
child_t next = {prev.end, find_endpoint(program, prev.end)};
|
||||
vec.push_back(next);
|
||||
}
|
||||
}
|
||||
|
||||
void population_t::drop(gp_program& program)
|
||||
{
|
||||
for (auto& pop : get_individuals())
|
||||
|
|
Loading…
Reference in New Issue