How to resolve the algorithm Evolutionary algorithm step by step in the OxygenBasic programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Evolutionary algorithm step by step in the OxygenBasic programming language

Table of Contents

Problem Statement

Starting with:

Note: to aid comparison, try and ensure the variables and functions mentioned in the task description appear in solutions

A cursory examination of a few of the solutions reveals that the instructions have not been followed rigorously in some solutions. Specifically, Note that some of the the solutions given retain characters in the mutated string that are correct in the target string. However, the instruction above does not state to retain any of the characters while performing the mutation. Although some may believe to do so is implied from the use of "converges" Strictly speaking, the new parent should be selected from the new pool of mutations, and then the new parent used to generate the next set of mutations with parent characters getting retained only by not being mutated. It then becomes possible that the new set of mutations has no member that is fitter than the parent! As illustration of this error, the code for 8th has the following remark. NOTE: this has been changed, the 8th version is completely random now Clearly, this algo will be applying the mutation function only to the parent characters that don't match to the target characters! To ensure that the new parent is never less fit than the prior parent, both the parent and all of the latest mutations are subjected to the fitness test to select the next parent.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Evolutionary algorithm step by step in the OxygenBasic programming language

Source code in the oxygenbasic programming language

'EVOLUTION

target="METHINKS IT IS LIKE A WEASEL"
le=len target
progeny=string le,"X"

quad seed
declare QueryPerformanceCounter lib "kernel32.dll" (quad*q)
QueryPerformanceCounter seed

Function Rand(sys max) as sys
  mov    eax,max
  inc    eax
  imul   edx,seed,0x8088405
  inc    edx
  mov    seed,edx
  mul    edx
  return edx
End Function

sys ls=le-1,cp=0,ct=0,ch=0,fit=0,gens=0

do                         '1 mutation per generation
  i=1+rand ls              'mutation position
  ch=64+rand 26            'mutation ascii code
  if ch=64 then ch=32      'change '@' to ' '
  ct=asc target,i          'target ascii code
  cp=asc progeny,i         'parent ascii code
  '
  if ch=ct then
    if cp<>ct then
      mid progeny,i,chr ch 'carry improvement
      fit++                'increment fitness
    end if
  end if
  gens++
  if fit=le then exit do   'matches target
end do
print progeny "  " gens 'RESULT (range 1200-6000 generations)

  

You may also check:How to resolve the algorithm Write language name in 3D ASCII step by step in the SQL programming language
You may also check:How to resolve the algorithm Levenshtein distance step by step in the Forth programming language
You may also check:How to resolve the algorithm Singly-linked list/Element definition step by step in the Haskell programming language
You may also check:How to resolve the algorithm Find largest left truncatable prime in a given base step by step in the J programming language
You may also check:How to resolve the algorithm Ethiopian multiplication step by step in the Ursala programming language