Takafumi Horiuchi

Tese de graduação sobre programação baseada em restrições

Resumo

O simulador verifica repetidamente muitas condições à medida que os eventos possíveis aumentam. Então, se for possível julgar a partir do progresso que 'esta condição nunca mais será satisfeita', não seria seguro parar essa verificação? Com base na direção da mudança dos valores, foi projetado e implementado um método para remover condições desnecessárias da busca em execução, voltado para a linguagem de modelagem de sistemas híbridos HydLa.

No modelo de avaliação, conseguimos reduzir o tempo de execução para cerca de metade do convencional, sem alterar os resultados da simulação. O importante não é que todos os cálculos tenham se tornado uniformemente mais rápidos. O que fizemos foi reduzir o próprio número de possibilidades a serem consideradas, utilizando a estrutura do problema.

A maneira de pensar sobre programação baseada em restrições aprendida neste estudo se tornou a base do Minha filosofia de design atual. Em vez de especificar diretamente cada resultado, a abordagem é definir regras, prioridades e limites, e derivar soluções que se realizem dentro desses parâmetros.


Questão — Quanto mais aumentam as possibilidades, mais lenta se torna a computação

HydLa é uma linguagem para descrever "sistemas híbridos", que combinam mudanças contínuas e eventos discretos, como restrições matemáticas e lógicas. Mesmo sem escrever toda a sequência de procedimentos, é possível simular comportamentos que atendam às condições declarando o que deve ser estabelecido.

Por outro lado, em modelos onde muitas regras se tornam válidas dependendo das condições, o simulador verifica repetidamente uma grande quantidade de candidatos. Como continuam a permanecer como candidatos mesmo condições que já foram ultrapassadas e que não serão satisfeitas no futuro, quanto maior o modelo, mais cálculos desnecessários se acumulam.

Tema — um sistema que mistura contínuo e discreto

Uma bola quicando é um exemplo claro de um sistema híbrido. No ar, sua posição e velocidade mudam continuamente, e no instante em que atinge o chão, ocorre um evento discreto de ricochete. Termostatos, carros e robôs também possuem esses dois tipos de mudança internamente, mesmo que em escalas diferentes.

Para a avaliação, utilizou-se um modelo no qual uma bola movendo-se horizontalmente rebate em uma superfície dividida em vários setores. Para cada setor da superfície, existe uma regra condicional do tipo 'se a bola chegar a esta área, ela rebate'. Ao aumentar o número de setores, aumenta-se o que pode ser representado, mas também aumentam as condições que o simulador precisa verificar.

Código-fonte do HydLa que define o comportamento de uma bola que se move horizontalmente e ricocheteia em qualquer um dos N setores de superfícies adjacentes.
Um modelo curto de HydLa descreve uma superfície dividida em uma bola e N seções com guardas.

Gargalo — o número de condições aumenta a complexidade computacional

As regras que só se tornam válidas quando certas condições são atendidas são chamadas de "restrições com guarda". No modelo de avaliação, a regra de rebote de um determinado setor só se torna válida quando a bola atinge o chão e sua posição horizontal está dentro desse setor específico.

Quando o número de parcelas é aumentado de 10 para 200, o simulador convencional ficou aproximadamente mais lento proporcional ao quadrado do número de parcelas. Em modelos de grande escala, o mesmo problema se torna maior devido ao aumento de objetos, áreas de contato e eventos possíveis.

Investigação — Onde estavam 96% do tempo de processamento

Ao medir o tempo de processamento, no modelo com 100 seções, 96% do total foi utilizado em FindMinTime. Este é o processamento de procurar, entre os candidatos, o 'próximo evento mais rápido' a ocorrer. Assim, todas as condições de guarda estavam sendo avaliadas repetidamente.

Os locais que precisam ser melhorados ficaram claros. Não é necessário refazer todo o método de cálculo; basta reduzir de forma segura os candidatos a serem passados para FindMinTime. O objetivo foi alterar apenas as possibilidades que não precisam ser verificadas, sem mudar os resultados da simulação.

Abordagem — remover com segurança condições que nunca mais se concretizarão

Gostaria que você imaginasse uma bola descendo uma escada quicando. Se a bola passa por um degrau e continua avançando, esse degrau não pode mais afetar a bola. Quem olha o gráfico ignora imediatamente os degraus que estão atrás da bola. O algoritmo original continuava verificando cada um deles, um por um.

O rastro vermelho indica a bola descendo enquanto quica nos degraus da escada preta. A área sombreada representa os degraus que já foram ultrapassados e que não têm mais relação.
À medida que a bola avança para a direita, é possível omitir o guarda da etapa sombreada que está atrás dela.

A parte difícil é mostrar que o guarda removido não será necessário mais tarde. Se você removê-lo apenas porque é falso agora, quando ele se tornar verdadeiro novamente, poderá silenciosamente retornar um resultado incorreto. Portanto, o método proposto usa a monotonicidade — a questão é se é possível garantir que uma variável continuará a aumentar ou a diminuir durante um determinado intervalo de tempo.

Quando a direção da mudança não muda

A primeira abordagem é aplicável quando a variável se move em apenas uma direção durante toda a simulação. Em um modelo com a superfície dividida, a posição horizontal da bola sempre aumenta. Uma vez que atravessa uma seção, as condições dessa seção nunca mais são satisfeitas. Essa propriedade pode ser verificada antes da simulação usando técnicas de verificação de modelo, permitindo que os guardas que se tornam desnecessários à medida que a execução avança sejam removidos com segurança.

A linha vermelha que sobe de α no tempo 0 até β no tempo máximo representa uma variável que continua aumentando ao longo da simulação.
A monotonicidade uniforme significa que a direção da mudança é mantida em todo o intervalo que está sendo simulado.

Quando a direção da mudança muda no meio do caminho

Muitos sistemas reais não se movem em uma única direção indefinidamente. As variáveis podem aumentar, mudar de direção e então diminuir. Assim, o artigo apresentou uma segunda abordagem. Primeiro, supõe-se uma direção, monitora-se essa suposição com uma asserção e, no ponto em que a direção muda, o processo de redução é reiniciado. A proteção removida para um intervalo monótono é restaurada quando o próximo intervalo começa.

Os cinco gráficos mostram como os intervalos assumidos de aumento, a falha da asserção, o novo intervalo de diminuição, a segunda falha e o intervalo monótono vão sendo confirmados um após o outro.
A falha de asserção divide o comportamento em mudança em intervalos que podem ser tratados como monotônicos.

Resultado — Tempo de execução do modelo de avaliação reduzido pela metade

Implementou-se uma abordagem para lidar com monotonicidade uniforme e avaliou-se em modelos com superfícies divididas. Tanto o algoritmo original quanto o método proposto apresentam aumento do tempo necessário à medida que o número de seções cresce. No entanto, o método proposto teve consistentemente menos carga de trabalho. Comparando as curvas ajustadas, o coeficiente de maior ordem caiu de 1,1463 para 0,6083, e neste benchmark o tempo total de simulação foi reduzido aproximadamente pela metade.

Isto não é uma afirmação de que todos os modelos HydLa serão duas vezes mais rápidos. O que está sendo mostrado é onde esse método funciona — modelos que têm muitos alvos com guardas, nos quais a direção da mudança pode ser provada, e durante a execução os guardas se tornam permanentemente irrelevantes.

Gráfico do tempo de simulação em relação a N. Em toda a faixa de 10 a 200 divisões de superfície, o método proposto fica abaixo do método original, e para N=200, mantém-se em cerca de 250 segundos em comparação com cerca de 470 segundos.
No modelo avaliado, o método proposto (quadrado) levou aproximadamente metade do tempo do algoritmo original (círculo).

Perspectiva obtida a partir desta pesquisa

O que foi feito neste estudo não foi acelerar um pouco cada cálculo individual. O objetivo foi usar o que se sabe sobre o comportamento do sistema para reduzir o conjunto de possibilidades a ser considerado. A ideia de restringir o espaço de busca sem alterar o resultado é a força da programação baseada em restrições.

O que foi implementado e avaliado é o caso em que a variável continua a se mover em uma direção. Quando a direção da mudança se altera no meio do caminho, a análise foi limitada ao projeto, e a avaliação permaneceu como uma questão futura. Também há espaço para usar propriedades além da monotonicidade e encontrar restrições desnecessárias adicionais.

O fato de eu atualmente tentar projetar as condições e limites que a IA pode explorar, em vez de projetar diretamente a saída da IA, também está ligado a essa experiência. Ao lidar com resultados complexos, é tão importante definir o que não precisa ser considerado quanto definir o que deve ser calculado.

Takafumi Horiuchi, Kazunori Ueda, “Dynamic Reduction of Guarded Constraints for the Hybrid Systems Modeling Language HydLa,” 2019 Annual Conference of the Japanese Society for Artificial Intelligence (33rd), 2019. DOI: 10.11517/pjsai.JSAI2019.0_1E3OS3b02