/*------------------------------------------------------------------------
*
* geqo_misc . c
* misc . printout and debug stuff
*
* Portions Copyright ( c ) 1996 - 2025 , PostgreSQL Global Development Group
* Portions Copyright ( c ) 1994 , Regents of the University of California
*
* src / backend / optimizer / geqo / geqo_misc . c
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
/* contributed by:
= * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * =
* Martin Utesch * Institute of Automatic Control *
= = University of Mining and Technology =
* utesch @ aut . tu - freiberg . de * Freiberg , Germany *
= * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * = * =
*/
#include "postgres.h"
#include "optimizer/geqo_misc.h"
#ifdef GEQO_DEBUG
/*
* avg_pool
*/
static double
avg_pool(Pool *pool)
{
int i;
double cumulative = 0 .0 ;
if (pool->size <= 0 )
elog(ERROR, "pool_size is zero" );
/*
* Since the pool may contain multiple occurrences of DBL_MAX , divide by
* pool - > size before summing , not after , to avoid overflow . This loses a
* little in speed and accuracy , but this routine is only used for debug
* printouts , so we don ' t care that much .
*/
for (i = 0 ; i < pool->size; i++)
cumulative += pool->data[i].worth / pool->size;
return cumulative;
}
/* print_pool
*/
void
print_pool(FILE *fp, Pool *pool, int start, int stop)
{
int i,
j;
/* be extra careful that start and stop are valid inputs */
if (start < 0 )
start = 0 ;
if (stop > pool->size)
stop = pool->size;
if (start + stop > pool->size)
{
start = 0 ;
stop = pool->size;
}
for (i = start; i < stop; i++)
{
fprintf(fp, "%d)\t" , i);
for (j = 0 ; j < pool->string_length; j++)
fprintf(fp, "%d " , pool->data[i].string[j]);
fprintf(fp, "%g\n" , pool->data[i].worth);
}
fflush(fp);
}
/* print_gen
*
* printout for chromosome : best , worst , mean , average
*/
void
print_gen(FILE *fp, Pool *pool, int generation)
{
int lowest;
/* Get index to lowest ranking gene in population. */
/* Use 2nd to last since last is buffer. */
lowest = pool->size > 1 ? pool->size - 2 : 0 ;
fprintf(fp,
"%5d | Best: %g Worst: %g Mean: %g Avg: %g\n" ,
generation,
pool->data[0 ].worth,
pool->data[lowest].worth,
pool->data[pool->size / 2 ].worth,
avg_pool(pool));
fflush(fp);
}
void
print_edge_table(FILE *fp, Edge *edge_table, int num_gene)
{
int i,
j;
fprintf(fp, "\nEDGE TABLE\n" );
for (i = 1 ; i <= num_gene; i++)
{
fprintf(fp, "%d :" , i);
for (j = 0 ; j < edge_table[i].unused_edges; j++)
fprintf(fp, " %d" , edge_table[i].edge_list[j]);
fprintf(fp, "\n" );
}
fprintf(fp, "\n" );
fflush(fp);
}
#endif /* GEQO_DEBUG */
Messung V0.5 in Prozent C=93 H=92 G=92
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-08-08)
¤
*© Formatika GbR, Deutschland