... under construction ...
The preprint of this work is available at: https://chemrxiv.org/articles/ChemOS_An_Orchestration_Software_to_Democratize_Autonomous_Discovery/5953606
License: Other
... under construction ...
The preprint of this work is available at: https://chemrxiv.org/articles/ChemOS_An_Orchestration_Software_to_Democratize_Autonomous_Discovery/5953606
Hi,
I am completing my final degree project on Bayesian Optimisation. I am implementing your ChemOS software to optimise a mixture of gold nanoparticles of different shapes to match spectra fingerprint of predefined objective extinction spectrum.
Conceptually, my experiment is very much the same as you RGB experiment in your PlosOne paper (Figure 2 in that paper).
Optimisation experiment:
In typical experiment I am having two different mixtures (two parameters, see input file below). The objective is the spectra of the mixture of both input solutions in 1 to 3 volume ratio. Therefore, Phoenics should find the right volume ration between two available solutions. Note, there is no more solution to be chosen by Phoenics. Once the Phoenics generates the proposed list of parameters, a home-made script scales (normalize) this list and submit it to corresponding pump. In doing so, the total volume of each consecutive mixture is kept constant.
Problem:
Although I can run the system in close-loop fashion using Phoenics algorithm, I am unable to bring the Phoenics back to the parameter combination that corresponds to the low-value loss during alternate explore/exploit cycles. That is, the Phoenics finds a spot in the surface of a low loss value, but it is unable to re-visiting this spot in next exploit runs (For detailed information on the parameters use see below).
Figure 1 shows the set of parameters (2) for Phoenics and Random Search.
Figure 1. Left: coordinates of 2 parameters proposed by Phoenics in consecutive runs. The numbers indicate the iteration.
The size of spot corresponds to the value of loss: the smallest the spot, the lowest is the loss value. Right: similar analysis for Random Search algorithm.
Analysing Figure 1, I can conclude that Phoenics is capable of exploring the parameter surface, it is able to reach the border of the parameter surface, but it is unable to exploit the areas of the minimum loss once they were visited.
Figure 2 shows the change of loss value for different iterations.
Figure 2. The evolution of the average loss value for 15 runs with 3 repetitions for Phoenics and Random Search.
Analyzing Figure 2, I can conclude that apparently until experiment 4 Phoenics works find but after that, it starts doing strange things.
Question: Can lambda value in the script alter the way Phoenics explore/exploit?
Thank you,
==========================================================================
Input parameters used for Phoenics algorithm:
_ALGORITHM_NAME = 'phoenics'
#_ALGORITHM_NAME = 'random_search'
#_ALGORITHM_NAME = 'spearmint'
#_ALGORITHM_NAME = 'smac'
#==============================================================
_DEFAULT_SETTINGS = {'algorithm': {'name': _ALGORITHM_NAME,
'num_batches': 1,
'batch_size': 2,
'random_seed': 100691},
'account_details': {},
'scratch_dir': '%s/.scratch' % _HOME,
'bot_database': {'path': _DB_BOT_PATH,
'database_type': _DB_BOT_TYPE},
'param_database': {'path': _DB_PARAM_PATH,
'database_type': _DB_PARAM_TYPE},
'request_database': {'path': _DB_REQUEST_PATH,
'database_type': _DB_REQUEST_TYPE},
'results_database': {'path': _DB_RESULTS_PATH,
'database_type': _DB_RESULTS_TYPE},
'feedback_database': {'path': _DB_FEEDBACK_PATH,
'database_type': _DB_FEEDBACK_TYPE},
'communicator': {'type': 'auto', 'port': 'PORT', 'channel_id': 'CHANNEL_ID', 'bot_id': 'BOT_ID'},
'experiments': [{'name': 'phoenics_low0high1โ,
'variables': [{'name': 'param0', 'type': 'float', 'low': 0.0, 'high': 1.0, 'size': 1},
{'name': 'param1', 'type': 'float', 'low': 0.0, 'high': 1.0, 'size': 1}],
'objectives': [{'name': 'obj_0', 'operation': 'average', 'hierarchy': 0, 'type': 'minimum', 'tolerance': 0.0}],
'repetitions': 3,
'description': 'description of the experiment'}],
'bots': [{'name': 'default_bot',
'parameters': ['param0', 'param1'],
'communication': {'dump_path': '~/Dropbox/Aplicaciones/bot_input/', 'pick_up_path': '~/Dropbox/Aplicaciones/bot_output/',
'status_file': 'chemos/ChemOS_status.pkl',
}}]
}
Input parameters used for Random Search algorithm:
#_ALGORITHM_NAME = 'phoenics'
_ALGORITHM_NAME = 'random_search'
#_ALGORITHM_NAME = 'spearmint'
#_ALGORITHM_NAME = 'smac'
#==============================================================
_DEFAULT_SETTINGS = {'algorithm': {'name': _ALGORITHM_NAME,
'num_batches': 1,
'batch_size': 2,
'random_seed': 100691},
'account_details': {},
'scratch_dir': '%s/.scratch' % _HOME,
'bot_database': {'path': _DB_BOT_PATH,
'database_type': _DB_BOT_TYPE},
'param_database': {'path': _DB_PARAM_PATH,
'database_type': _DB_PARAM_TYPE},
'request_database': {'path': _DB_REQUEST_PATH,
'database_type': _DB_REQUEST_TYPE},
'results_database': {'path': _DB_RESULTS_PATH,
'database_type': _DB_RESULTS_TYPE},
'feedback_database': {'path': _DB_FEEDBACK_PATH,
'database_type': _DB_FEEDBACK_TYPE},
'communicator': {'type': 'auto', 'port': '3000', 'channel_id': 'C01NLGGFQBY', 'bot_id': 'U01P18KQXA6'},
'experiments': [{'name': 'random_search_low0high1',
'variables': [{'name': 'param0', 'type': 'float', 'low': 0.0, 'high': 1.0, 'size': 1},
{'name': 'param1', 'type': 'float', 'low': 0.0, 'high': 1.0, 'size': 1}],
'objectives': [{'name': 'obj_0', 'operation': 'average', 'hierarchy': 0, 'type': 'minimum', 'tolerance': 0.0}],
'repetitions': 3,
'description': 'description of the experiment'}],
'bots': [{'name': 'default_bot',
'parameters': ['param0', 'param1'],
'communication': {'dump_path': '~/Dropbox/Aplicaciones/bot_input/', 'pick_up_path': '~/Dropbox/Aplicaciones/bot_output/',
'status_file': 'chemos/ChemOS_status.pkl',
}}]
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.