mirror of
https://github.com/ejeanboris/MDAF.git
synced 2025-04-30 04:22:28 +00:00
urgency
This commit is contained in:
@ -1,10 +1,11 @@
|
|||||||
# directly running the DOE because existing surrogates can be explored with another workflow
|
# directly running the DOE because existing surrogates can be explored with another workflow
|
||||||
|
from os import path
|
||||||
import importlib.util
|
import importlib.util
|
||||||
import multiprocessing
|
import multiprocessing
|
||||||
import time
|
import time
|
||||||
|
import re
|
||||||
from numpy import random as r
|
from numpy import random as r
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -47,6 +48,67 @@ def measure(heuristicpath, heuristic_name, funcpath, funcname, objs, args, scale
|
|||||||
|
|
||||||
connection.send(response)
|
connection.send(response)
|
||||||
|
|
||||||
|
def writerepresentation(funcpath, charas):
|
||||||
|
# Save a backup copy of the function file
|
||||||
|
shutil.copyfile(funcpath, funcpath + '.old')
|
||||||
|
|
||||||
|
# create a string format of the representation variables
|
||||||
|
representation = ''
|
||||||
|
for line in list(charas):
|
||||||
|
representation += '\n\t#_# ' + line + ': ' + str(charas[line])
|
||||||
|
representation+='\n'
|
||||||
|
|
||||||
|
# Creating the new docstring to be inserted into the file
|
||||||
|
with open(funcpath, "r") as file:
|
||||||
|
content = file.read()
|
||||||
|
docstrs = re.findall("def main\(.*?\):.*?'''(.*?)'''.*?return\s+.*?", content, re.DOTALL)[0]
|
||||||
|
docstrs += representation
|
||||||
|
repl = "\\1"+docstrs+"\t\\2"
|
||||||
|
|
||||||
|
# Create the new content of the file to replace the old. Overwriting the whole thing
|
||||||
|
pattrn = re.compile("(def main\(.*?\):.*?''').*?('''.*?return\s+.*?\n|$)", flags=re.DOTALL)
|
||||||
|
newContent = pattrn.sub(repl, content, count=1)
|
||||||
|
# Overwrite the test function file
|
||||||
|
with open(funcpath,"w") as file:
|
||||||
|
file.write(newContent)
|
||||||
|
|
||||||
|
def representfunc(funcpath):
|
||||||
|
#defining the function name
|
||||||
|
funcname = path.splitext(path.basename(funcpath))[0]
|
||||||
|
# loading the function to be represented
|
||||||
|
spec = importlib.util.spec_from_file_location(funcname, funcpath)
|
||||||
|
funcmodule = importlib.util.module_from_spec(spec)
|
||||||
|
spec.loader.exec_module(funcmodule)
|
||||||
|
|
||||||
|
# Finding the function characteristics inside the docstring
|
||||||
|
if funcmodule.main.__doc__:
|
||||||
|
regex = re.compile("#_#\s?(\w+):\s?([-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?)")
|
||||||
|
characs = re.findall(regex, funcmodule.main.__doc__)
|
||||||
|
results = {}
|
||||||
|
for charac in characs:
|
||||||
|
results[charac[0]] = float(charac[1])
|
||||||
|
|
||||||
|
# Automatically generate the representation if the docstrings did not return anything
|
||||||
|
if not results:
|
||||||
|
print("Calculating the Characteristics")
|
||||||
|
|
||||||
|
# Modality
|
||||||
|
|
||||||
|
# Basins
|
||||||
|
|
||||||
|
# Valleys
|
||||||
|
|
||||||
|
# Separability
|
||||||
|
|
||||||
|
# Dimensionality
|
||||||
|
|
||||||
|
|
||||||
|
# Writing the calculated representation into the test function file
|
||||||
|
writerepresentation(funcpath, results)
|
||||||
|
|
||||||
|
|
||||||
|
return results
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def doe(heuristicpath, heuristic_name, testfunctionpaths, funcnames, objs, args, scale):
|
def doe(heuristicpath, heuristic_name, testfunctionpaths, funcnames, objs, args, scale):
|
||||||
@ -91,4 +153,6 @@ def doe(heuristicpath, heuristic_name, testfunctionpaths, funcnames, objs, args,
|
|||||||
for process in proc: print(process.name + "____\n" + str(responses[process.name]) + "\n_________________")
|
for process in proc: print(process.name + "____\n" + str(responses[process.name]) + "\n_________________")
|
||||||
|
|
||||||
|
|
||||||
doe (heuristicpath, heuristic_name, testfunctionpaths, funcnames, objs, args, scale)
|
#doe (heuristicpath, heuristic_name, testfunctionpaths, funcnames, objs, args, scale)
|
||||||
|
|
||||||
|
representfunc("/home/remi/Documents/MDAF-GitLAB/SourceCode/TestFunctions/Bukin2.py")
|
@ -1,2 +1,12 @@
|
|||||||
def main(args):
|
def main(args):
|
||||||
|
'''
|
||||||
|
|
||||||
|
:param args: list of floats
|
||||||
|
:return: float
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
return 100*(args[1]-0.01*args[0]**2+1)+0.01*(args[0]+10)**2
|
return 100*(args[1]-0.01*args[0]**2+1)+0.01*(args[0]+10)**2
|
||||||
|
|
||||||
|
return 0
|
||||||
|
8
SourceCode/TestFunctions/Keane.py
Normal file
8
SourceCode/TestFunctions/Keane.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#Import math library
|
||||||
|
import math
|
||||||
|
|
||||||
|
|
||||||
|
def main(args):
|
||||||
|
for x in args:
|
||||||
|
if(x<0 | x>10): return 0
|
||||||
|
return (math.sin(args[0]-args[1])**2*math.sin(args[0]+args[1])**2)/(math.sqrt(args[0]**2+args[1]**2))
|
8
SourceCode/TestFunctions/Leon.py
Normal file
8
SourceCode/TestFunctions/Leon.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#Import math library
|
||||||
|
|
||||||
|
|
||||||
|
def main(args):
|
||||||
|
for x in args:
|
||||||
|
if x < -1.2 or x > 1.2:
|
||||||
|
return 0
|
||||||
|
return (100*(args[1]-args[0])**2)+(1-args[0])**2
|
18
SourceCode/TestFunctions/Matyas.py
Normal file
18
SourceCode/TestFunctions/Matyas.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
def main(args):
|
||||||
|
"""
|
||||||
|
>>> main([0,1])
|
||||||
|
0.26
|
||||||
|
|
||||||
|
:param args: list of floats
|
||||||
|
:return: float
|
||||||
|
|
||||||
|
"""
|
||||||
|
for x in args:
|
||||||
|
if x < -10 or x > 10:
|
||||||
|
return 0
|
||||||
|
return (0.26*(args[0]**2+args[1]**2))-(0.48*args[0]*args[1])
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import doctest
|
||||||
|
doctest.testmod()
|
16
SourceCode/TestFunctions/McCormick.py
Normal file
16
SourceCode/TestFunctions/McCormick.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import math
|
||||||
|
def main(args):
|
||||||
|
"""
|
||||||
|
>>>main([-0.547, -1.547])
|
||||||
|
0
|
||||||
|
|
||||||
|
:param args:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
for args[0] in args:
|
||||||
|
if args[0] < -1.5 or args[0] > 4:
|
||||||
|
return 0
|
||||||
|
if args[1] < -3 or args[1] > 3:
|
||||||
|
return 0
|
||||||
|
return math.sin(args[0]+args[1])+(args[0]-args[1])**2-(3*args[0]/2)+(5*args[1/2])+1
|
||||||
|
|
16
SourceCode/TestFunctions/Miele_Cantrell.py
Normal file
16
SourceCode/TestFunctions/Miele_Cantrell.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import math
|
||||||
|
|
||||||
|
|
||||||
|
def main(args):
|
||||||
|
"""
|
||||||
|
>>>main([0, 1, 1, 1])
|
||||||
|
0
|
||||||
|
:param args:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
for x in args:
|
||||||
|
if x < -1 or x > 1:
|
||||||
|
return 0
|
||||||
|
return (math.exp(-args[0])-args[1])**4+(100*(args[1]-args[2])**6)+(math.tan(args[2]-args[3]))**4+args[0]**8
|
||||||
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
|
|
Reference in New Issue
Block a user