Na postagem Pré-seleção de solventes por temperatura de ebulição usando pesquisa linear em JavaScript, foi apresentado na introdução, o algoritmo da pesquisa linear em detalhes. Depois foi apresentada uma versão modificada do algoritmo em sua versão mais elementar, a fim de implementar uma rotina que fizesse a seleção de solventes de um dicionário em função de sua temperatura de ebulição, gerando uma lista com os compostos que seriam adequados para uma dada aplicação em uma temperatura específica.
Agora, nessa postagem, vamos implementar um código que seja capaz de realizar a escolha de solventes em um dicionário em função de mais de uma parâmetro fisico-químico da substância.
Imagine que você trabalha em uma empresa que comercializa diferentes solventes orgânicos. Abaixo na Tabela 1 está a lista dos produtos comercializados com seus pontos de ebulição e seu ponto de fulgor. Você recebe com frequência a demanda de selecionar os solventes em função de sua temperatura de ebulição e também, que não sejam inflamáveis ou que não sejam inflamáveis nem combustíveis. Você gostaria de automatizar essa escolha para evitar de ter de fazê-la manualmente na tabela abaixo.
| Solvente | Temperatura de ebulição (°C) | Ponto de fulgor (°C) |
|---|---|---|
| Acetona | 56,1 | -17 |
| Butilglicol | 171,2 | 65,5 |
| Butildiglicol | 230,6 | 105 |
| Etildiglicol | 202,7 | 91 |
| Etilglicol | 135,1 | 43 |
| Etilenoglicol | 197,6 | 116 |
| Dietilenoglicol | 245,8 | 124 |
| Tolueno | 110,5 | 4,4 |
| Xileno | 140 | 31 |
| Hexano | 68,7 | -35 |
| Acetato de butilglicol | 191,6 | 74 |
| Acetato de isopentila | 142 | 34 |
| Isoforona | 215,2 | 84,4 |
| Acetato de etila | 77,2 | -3 |
| Diisobutil cetona | 169,3 | 49 |
| Isopentanol | 131,4 | 42,7 |
| Isopropanol | 82,4 | 12 |
| n-Propanol | 97,2 | 15 |
O critério de classificação de solventes em inflamáveis ou combustíveis que você deve aplicar é a NR-20:
Dessa forma, temos que fazer uma adaptação novamente do algoritmo de pesquisa linear para que faça escolha em função de critérios múltiplos. Esse algoritmo modificado é apresentado na seção a seguir.
Para a implementação do algoritmo, primeiramente teremos que ter uma estrutura de dados que irá descrever o conjunto de solventes apresentado na Tabela 1. Agora não temos apenas um valor associado a cada substância, mas duas propriedades. A estrutura de dados que deve ser utilizada é um dicionário implementado como um objeto JavaScript aninhado. Cada chave do dicionário é uma string que representa o nome de um solvente. O valor associado a cada chave não é um valor simples, mas sim outro objeto, que contém as propriedades físico-químicas do solvente, como a temperatura de ebulição (Teb) e o ponto de fulgor (Tfulgor). Não foi possível apresentar o dicionário completo na Figura 1, mas apenas uma parte devido ao seu tamanho.
Para resolver o problema, o novo algoritmo deverá realizar as seguintes tarefas : percorrer a estrutura de dados do tipo dicionário aninhado na qual a chave seja o nome dos solventes associada a duas propriedades (temperatura de ebulição e ponto de fulgor), fazer a comparação do tipo " > (maior) " entre a temperatura de ebulição de cada solvente do dicionário e a temperatura da aplicação do cliente, fazer a comparação do tipo " > (maior) " entre o ponto de fulgor e os critérios de classificação de fluido inflamável ou fluido combustível segundo critérios da NR 20, gerar como saída um array de strings dos solventes selecionados segundo os múltiplos critérios.
Na Figura 2 é apresentado o algoritmo da pesquisa linear que classifica segundo os dois critérios. Para armazenar a lista de strings que representam os solventes selecionados, foi criado um array inicializado vazio chamado resultado. Depois foi feito um laço for(let chave in solventes) que percorre todas as posições do dicionário. O comando solventes[chave].Teb acessa a propriedade temperatura de ebulição que está no segundo objeto do dicionário, e compara o valor com a Toper (temperatura de aplicação do cliente que é entrada do algoritmo). Já o comando solventes[chave].Tfulgor acessa a propriedade temperatura de fulgor que também está no segundo objeto do dicionário e faz a comparação com a TfulgorMin que vem da aplicação do critério de líquido inflamável ou combustível segundo a NR 20. Os dois critérios são aplicados simultaneamente, por isso são ligados por um operador && (AND booleano). Se algum solvente atende aos dois critérios, sua chave é armazenada no array resultado.
Na segunda parte do algoritmo é verificado se o comprimento do array resultado é igual a 0. Caso positivo, é impresso que nenhum solvente foi encontrado. Caso negativo, é impresso o array resultado com a lista dos solventes que podem ser pré-selecionados para a aplicação.
Na Figura 3 são apresentadas as saídas do algoritmo para as tempraturas Toper=100 °C e TfulgorMin=60 °C (selecionando líquidos que não sejam inflamáveis) e Toper=100 °C e TfulgorMIN=93 °C (selecionando líquidos que não sejam nem inflamáveis nem combustíveis). Esse algoritmo não exclui uma análise mais completa incluindo compatibilidade, toxicidade entre outros critérios. É um exemplo simples de como automatizar decisões preliminares de engenharia de processo.
Desenvolvimento : Química Programada