Ao resolver problemas práticos com regularidade invejável, é preciso enfrentar duas abordagens típicas apresentadas nas reuniões ou no ar.
- Opção 1 - vamos resolver um problema específico de uma maneira geral. Tendo resolvido dessa maneira, poderemos resolver muito mais ao longo do caminho.
- Opção 2 - vamos prever previsões, ML e muitas coisas da moda para prever o comportamento de um sistema não linear. Legal depois de tudo.
No entanto, a aplicação de tais abordagens nem sempre é adequada à formulação inicial do problema.
É uma continuação de publicações anteriores .
Por que essas abordagens podem ser redundantes? Sim, por várias razões: o tempo necessário para encontrar uma solução para um problema, o tempo necessário para calcular, os requisitos para a quantidade de recursos de computação, executando cálculos com alta precisão, construindo o modelo errado, a alta complexidade da solução analítica para o problema direto, a alta complexidade de resolver o problema inverso e muito mais.
Mas existe uma maneira clássica de resolver esses problemas, o que é especialmente bom se você tiver um computador poderoso em mãos. Método de Monte Carlo. Stat. análise dos resultados de várias soluções para um problema direto, que, por via de regra, é bem algorítmico.
As respostas necessárias, como primeira aproximação, podem ser obtidas em poucas horas, incluindo a compreensão do problema, a codificação e a realização de cálculos aproximados.
Abaixo estão apenas 2 exemplos.
Exemplo 1. Combinatória de listas aninhadas
A tarefa comercial inicial é expandir a base de treinamento do bot de bate-papo com base em um pequeno conjunto de frases de entrada. Uma grande variedade de frases-fonte simplesmente não é fisicamente. Mas pode ser significativamente expandido por uma análise preliminar da estrutura da sentença e pela geração de permutações permitidas pelas regras da linguagem. Por exemplo, "um tubo flui na sala 6" e "em um tubo sala 6 flui" são essencialmente idênticos.
Então, uma declaração formalizada. Há uma lista multinível de listas aninhadas. É necessário gerar quase todas as permutações possíveis da lista original de valores, desde que as permutações dos elementos sejam permitidas apenas dentro de cada lista separada .
ll <- list(list('a', 'b', 'c'), 'd', list('e', 'f', list('g', 'h', 'i'))) # factorial(3) * factorial(3) * factorial(3) * factorial(3)

Um esboço de uma possível solução. Exemplo 2. Prevendo Filas de Clientes
O esquema de medição é tal que é possível obter indicadores externos do processo (consideramos bastante complicado e instável no tempo), como o horário de chegada e saída dos clientes, a estrutura da cesta e muito mais.
Opção número 1 - resolvendo o problema de frente. Zero conhecimento teórico do intérprete + acumulação da massa histórica de todos os tipos de indicadores externos (características) e uso de métodos de ML para "ajuste". Algumas previsões estão sendo feitas, mas o que, por que e como está além do escopo, é necessário o uso de "intérpretes" lianerizados.
Opção nº 2 - Usamos o método científico de cognição. Abrimos a teoria dos sistemas de filas, construímos uma estatística. indicadores de processo de acordo com os parâmetros QS, lançamos uma simulação discreta e parametrizada do serviço ao cliente. Temos um "modelo digital" do Sistema, que possui alavancas de controle e um poder explicativo analítico baseado precisamente na natureza dos objetos observados, e não em um conjunto de certas "características".
R tem um ótimo pacote de simmer
para isso. Todas as informações e muitos exemplos práticos aqui .
Post anterior - “Alguns detalhes sobre como trabalhar com identificadores bigint em R” .