llmize.methods.opro module

class llmize.methods.opro.OPRO(problem_text=None, obj_func=None, llm_model=None, api_key=None)[source]

Bases: Optimizer

No-index:

OPRO (Optimization by PROmpting) optimizer for numerical optimization using LLMs.

OPRO is the original approach that directly prompts LLMs to generate better solutions based on previous examples. It works by showing the LLM a history of solutions and their scores, then asking it to generate new solutions that improve upon the best ones.

This optimizer is best suited for: - Simple optimization problems with clear patterns - Problems where the relationship between solutions and scores is easily learnable - Quick prototyping and testing - Problems with relatively small search spaces

Example

>>> def sphere(x):
...     return sum(float(i)**2 for i in x)
>>>
>>> opro = OPRO(
...     problem_text="Minimize the sphere function sum(x_i^2)",
...     obj_func=sphere,
...     api_key="your-api-key"
... )
>>> result = opro.minimize(
...     init_samples=[["1", "1"], ["2", "2"]],
...     init_scores=[2, 8],
...     num_steps=10
... )

Note

This class inherits from Optimizer and uses the default configuration parameters unless overridden during initialization or optimization.

__init__(problem_text=None, obj_func=None, llm_model=None, api_key=None)[source]

Initialize the OPRO optimizer.

Parameters:
  • problem_text (str, optional) – Natural language description of the optimization problem. This should clearly state what needs to be optimized and any constraints.

  • obj_func (callable, optional) – Objective function that takes a solution and returns a numerical score. Higher scores indicate better solutions for maximization, lower scores for minimization.

  • llm_model (str, optional) – Name of the LLM model to use. If None, uses the default from configuration file.

  • api_key (str, optional) – API key for the LLM service. If None, will attempt to read from environment variables.

meta_prompt(batch_size, example_pairs, optimization_type='maximize')[source]

Generate a prompt for the LLM model to generate new solutions. Parameters: - batch_size (int): Number of new solutions to generate. - example_pairs (str): Example solutions and scores. - optimization_type (str): “maximize” or “minimize” (default: “maximize”).

Returns: - text: A formatted prompt structure.

optimize(init_samples=None, init_scores=None, num_steps=None, batch_size=None, temperature=None, callbacks=None, verbose=1, optimization_type='maximize', parallel_n_jobs=None)[source]

Run the OPRO optimization algorithm.

Parameters: - init_samples (list): A list of initial solutions. - init_scores (list): A list of initial scores corresponding to init_samples. - num_steps (int): The number of optimization steps (default from config). - batch_size (int): The number of new solutions to generate at each step (default from config). - temperature (float): The temperature for the LLM model (default from config). - callbacks (list): A list of callback functions to be triggered at the end of each step. - optimization_type (str): “maximize” or “minimize” (default: “maximize”). - parallel_n_jobs (int): Number of parallel jobs for evaluation (default from config).

Returns: - results (OptimizationResult): An object containing the optimization results.