Skip to main content
IBM Quantum Platform

Referencia de la API de Quantum Portfolio Optimizer

  • Qiskit Functions

    Qiskit Functions — Herramientas preconfiguradas creadas por organizaciones asociadas — que abstraen partes del flujo de trabajo de desarrollo de software para simplificar y acelerar el descubrimiento de algoritmos y el desarrollo de aplicaciones a escala industrial. Haz clic aquí para ver la guía de esta función de Qiskit.


Entrada

Los argumentos de entrada de la función se describen en la siguiente lista. Se deben proporcionar los datos de los activos y otras especificaciones del problema; además, se pueden incluir los parámetros de VQE para personalizar el proceso de optimización.

assets

Tipo: `json`

Diccionario con los precios de los activos. Los datos deben estar estructurados como un objeto JSON que contenga información sobre los precios de cierre de los activos financieros en fechas concretas. El formato es el siguiente:

  • Clave primaria (cadena de caracteres): El nombre o el símbolo bursátil del activo financiero (por ejemplo, « 8801.T »).
  • Clave secundaria (cadena): La fecha en formato AAAA-MM-DD.
  • Valor (número): El precio de cierre del activo en la fecha indicada. Los precios pueden introducirse normalizados o sin normalizar.

Ten en cuenta que todos los diccionarios deben tener la misma clave secundaria (fechas). Si un activo concreto carece de una fecha que otros sí tienen, hay que completar los datos para garantizar la coherencia. Por ejemplo, esto se puede hacer utilizando el último precio de cierre registrado de ese activo.

  • Obligatorio: Sí
  • Ejemplo:
{
    "8801.T": {
        "2023-01-01": 2374.0,
        "2023-01-02": 2374.0,
        "2023-01-03": 2374.0,
        "2023-01-04": 2356.5,
        ...
    },
    "AAPL": {
        "2023-01-01": 145.2,
        "2023-01-02": 146.5,
        "2023-01-03": 147.3,
        "2023-01-04": 148.1,
        ...
    },
    ...
}
{
    "asset_name": {
        "date": closing_value,
        ...
    },
    ...
}
Nota

Los datos de los activos deben incluir, como mínimo, los precios de cierre en los (nt+1) * dt momentos indicados (véase la sección qubo_settings de entrada) (por ejemplo, días).

qubo_settings

Tipo: `json`

Configuración del QUBO. En la siguiente tabla se describen las claves del diccionario qubo_settings . Crea el diccionario especificando el número de pasos temporales nt, el número de qubits de resolución nq y el max_investment - o modifica otros valores predeterminados.

Nombre
Tipo
Descripción
Obligatorio
Valor predeterminado
Ejemplo
ntintNúmero de intervalos de tiempo-4
nqintNúmero de qubits de resolución-4
max_investmentflotanteNúmero máximo de unidades monetarias invertidas en todos los activos-10
dt*intIntervalo de tiempo considerado en cada paso temporal. La unidad ajusta los intervalos de tiempo entre las claves de los datos de los activosNo30-
risk_aversionflotanteCoeficiente de aversión al riesgoNo1.000-
transaction_feeflotanteCoeficiente de comisión por transacciónNo0.01-
restriction_coeffflotanteMultiplicador de Lagrange utilizado para garantizar el cumplimiento de la restricción del problema en la formulación QUBONo1-
  • Obligatorio: Sí

ansatz_settings

Tipo: `json`

Valor predeterminado: `None`

Configuración del Ansatz. Para modificar las opciones predeterminadas, crea un diccionario para el ansatz_settings parámetro con las siguientes claves. Por defecto, el ansatz está configurado en "real_amplitudes", y ambas opciones adicionales (véase la tabla siguiente) están configuradas en False.

Nombre
Tipo
Descripción
Obligatorio
Valor predeterminado
ansatz*strEnfoque que se utilizaráNo"real_amplitudes"
multiple_passmanager**boolHabilita la subrutina de gestión de pases múltiples (no disponible para el enfoque «Tailored»)NoFalse
dd_enableboolAñade desacoplamiento dinámicoNoFalse

* Enfoques disponibles

  • real_amplitudes
  • cyclic
  • optimized_real_amplitudes
  • tailored (Solo para ibm_torino el backend, 7 activos, 4 pasos temporales y 4 qubits de resolución)

** Si multiple_passmanager se establece en False, la función utiliza el gestor de pases predeterminado de Qiskit con optimization_level=3. Si se establece en True, la multiple_passmanager subrutina compara tres gestores de pasadas: el gestor de pasadas predeterminado anterior de Qiskit, un gestor de pasadas que asigna los qubits a la cadena de vecinos más cercanos de la QPU y los servicios del transpilador de IA. A continuación, se selecciona el gestor de pases con el error acumulativo estimado más bajo.

  • Requisito: No

optimizer_settings

Tipo: `json`

Valor predeterminado: `None`

Configuración del optimizador. Este parámetro es un diccionario que contiene algunas opciones configurables del proceso de optimización.

Nombre
Tipo
Descripción
Obligatorio
Valor predeterminado
primitive_optionsjsonConfiguración de la primitivaNo-
optimizerstrOptimizador clásico seleccionadoNo"differential_evolution"
optimizer_optionsjsonConfiguración del optimizadorNo-
Nota

Actualmente, la única opción de optimizador disponible es "differential_evolution".

Bajo las claves primitive_options``optimizer_options y configuramos diccionarios con los siguientes parámetros:

primitive_options

Nombre
Tipo
Descripción
Obligatorio
Valor predeterminado
Ejemplo
sampler_shotsintNúmero de disparos del Sampler.No100000-
estimator_shotsintNúmero de disparos del Estimator.No25000-
estimator_precisionflotantePrecisión deseada del valor esperado. Si se especifica, se utilizará la precisión en lugar del estimator_shots.NoNone0.015625 · (1 / √4096)
max_timeint o strTiempo máximo durante el cual una sesión de ejecución puede permanecer abierta antes de que se cierre de forma forzada. Se puede indicar en segundos (int) o como una cadena, como "2h 30m 40s". Debe ser inferior al máximo establecido por el sistema.NoNone"1h 15m"

optimizer_options

Nombre
Tipo
Descripción
Obligatorio
Valor predeterminado
num_generationsintNúmero de generacionesNo20
population_sizeintTamaño de la poblaciónNo20
mutation_rangelist deFactor de mutación máximo y mínimoNo[0, 0.25]
recombinationflotanteFactor de recombinaciónNo0.4
max_parallel_jobsintNúmero máximo de trabajos de QPU ejecutados en paraleloNo3
max_batchsizeintTamaño máximo de loteNo200
Nota
  • El número de generaciones evaluadas por la evolución diferencial es num_generations +1, ya que se incluye la población inicial.

  • El número total de circuitos se calcula de la siguiente manera (num_generations + 1) * population_size:

  • El uso de un tamaño de población mayor y de más generaciones suele mejorar la calidad de los resultados de la optimización. Sin embargo, no se recomienda superar un tamaño de población de 120 individuos ni un número de generaciones superior a 20 (por ejemplo, 120 * 21 = 2520 el número total de iteraciones), ya que esto generaría un número excesivo de iteraciones, cuyo procesamiento puede resultar muy costoso desde el punto de vista computacional y llevar mucho tiempo.

  • Esta función permite reanudar la optimización anterior, y siempre es posible aumentar el número de generaciones (introduciendo los mismos datos de entrada, salvo por previous_session_id y un valor mayor de num_generations).

  • Requisito: No

backend

Tipo: `str`

El nombre del backend de la QPU

  • Requisito: No
  • Ejemplo:ibm_torino

previous_session_id

Tipo: `list` of `str`

Valor predeterminado: Empty list

Lista de identificadores de sesión para recuperar datos de ejecuciones anteriores. Para reanudar una ejecución o recuperar trabajos que se procesaron en una o varias sesiones anteriores, es necesario indicar la lista de ID de sesión en el previous_session_id parámetro. Esto resulta especialmente útil en los casos en que una tarea de optimización no se ha completado debido a algún error en el proceso y es necesario finalizar la ejecución. Para ello, debes proporcionar los mismos argumentos que se utilizaron en la ejecución inicial, junto con la previous_session_id lista tal y como se ha descrito.

  • Requisito: No
  • Ejemplo:["session_id_1", "session_id_2"]

apply_postprocess

Tipo: `bool`

Valor predeterminado: `True`

Aplicar un posprocesamiento SQD sensible al ruido.

  • Requisito: No
  • Ejemplo:True

tags

Tipo: `list` of `str`

Valor predeterminado: Empty list

Lista de etiquetas para identificar el experimento.

  • Requisito: No
  • Ejemplo:["optimization", "quantum_computing"]
Aviso

La carga de datos de sesiones anteriores (para reanudar una optimización) puede llevar hasta una hora de tiempo de cálculo clásico. Esto no consume recursos de tiempo de ejecución de Quantum.

Nota

Asegúrese de que se respeten los límites de trabajo de Qiskit Runtime.

  • Muestra: sampler_shots <= 10_000_000.
  • Estimador: max_batchsize * estimator_shots * observable_size <= 10_000_000 (para esta función, todos los términos de la observable conmutan, por lo que observable_size=1).

Consulta la guía sobre límites de tareas para obtener más información.


Resultado

La función devuelve dos diccionarios: "result" dictionary, que contiene los mejores resultados de la optimización, incluida la solución óptima y el coste objetivo mínimo asociado; y "metadata", con los datos de todos los resultados obtenidos durante el proceso de optimización, junto con sus respectivas métricas.

El primer diccionario se centra en la solución con mejor rendimiento, mientras que el segundo ofrece información detallada sobre todas las soluciones, incluidos los costes objetivos y otras métricas relevantes.

result diccionario

Tipo: dict[str, dict[str, float]]

Contiene la estrategia de inversión a lo largo del tiempo, de modo que cada marca temporal se corresponde con las ponderaciones de inversión específicas de cada activo (cada ponderación es el importe de la inversión normalizado con respecto al importe total de la inversión).

  • Ejemplo:{'time_1': {'asset_1': 0.2, 'asset_2': 0.3, ...}, ...}

metadata diccionario

Tipo: dict[str, Any]

Datos generados durante el análisis, incluyendo soluciones, costes y métricas.

Nombre
Type
Descripción
Ejemplo
session_idstrIdentificador único de la sesión de IBM Quantum."d0h30qjvpqf00084fgw0"
all_samples_metricsdictDiccionario que contiene diversas métricas para cada muestra posprocesada, como costes o restricciones.Ver descripción
sampler_counts[d] ictstr, intDiccionario en el que las claves son representaciones en forma de cadena de bits de soluciones muestreadas y los valores son sus recuentos.{"101010": 3, "111000": 1}
asset_order[liststr]Enumera el orden de inversión de los activos en cada intervalo de tiempo dentro de las estrategias de inversión.["Asset_0", "Asset_1", "Asset_3"]
QUBOlista[ [listfloat] ]Matriz QUBO del problema.[[-6.96e-01, 5.81e-01, -1.26e-02, 0.00e+00], ...]
resource_summarydict[cadena, [cadena] _diccionario, número]Resumen de los tiempos de uso de la CPU y la QPU (en segundos) en las diferentes fases del proceso.{'RUNNING: EXECUTING_QPU': {'CPU_TIME': 412.84, 'QPU_TIME': 87.22}, ...}

Descripción del all_samples_metrics diccionario

Nombre
Type
Descripción
Ejemplo
investment_trajectories[l] istaEstrategias de inversión derivadas de estados cuánticos descodificados.[[1, 2, 2], [1, 2, 1]]
counts[escuchando]Número de veces que se tomó una muestra de cada trayectoria de inversión. El índice coincide investment_trajectories.[5, 3]
objective_costs[listfloat]Valor de la función objetivo para cada trayectoria de inversión, ordenados de menor a mayor.[0.98, 1.25]
sharpe_ratios[listfloat]Rendimiento ajustado al riesgo (índice de Sharpe) para cada trayectoria de inversión. Ordenado por índice.[1.1, 0.7]
returns[listfloat]Rentabilidad prevista para cada trayectoria de inversión. Ordenado por índice.[0.15, 0.10]
rest_breaches[listfloat]Desviación máxima de la restricción dentro de cada trayectoria de inversión. Ordenado por índice.[0.0, 0.25]
transaction_costs[listfloat]Coste estimado de transacción asociado a cada trayectoria de inversión. Ordenado por índice.[0.01, 0.02]
¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.