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
|
||||
|
||||
from os import path
|
||||
import importlib.util
|
||||
import multiprocessing
|
||||
import time
|
||||
|
||||
import re
|
||||
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)
|
||||
|
||||
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):
|
||||
@ -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_________________")
|
||||
|
||||
|
||||
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):
|
||||
'''
|
||||
|
||||
:param args: list of floats
|
||||
:return: float
|
||||
|
||||
|
||||
|
||||
'''
|
||||
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