From f55c9f85e809581fa758357d44911768ffa99179 Mon Sep 17 00:00:00 2001 From: Leonardo Grando Date: Sun, 22 Sep 2024 14:54:25 -0300 Subject: [PATCH] mais mudancas --- index.json | 2 +- index.xml | 30 +++++++++++++++++- post/index.xml | 30 +++++++++++++++++- post/ollama/index.html | 30 +++++++++++++++++- post/ollama/neofetch.png | Bin 0 -> 61989 bytes ..._61989_1200x1200_fit_q75_h2_lanczos_3.webp | Bin 0 -> 40508 bytes ...1989_e0e7a9606a7a95aaa22244ecc7136c1b.webp | Bin 0 -> 40286 bytes ...1989_e8cff4527c8809eac29d96bc9cf8a763.webp | Bin 0 -> 17244 bytes tag/ai/index.xml | 30 +++++++++++++++++- tag/enginnering/index.xml | 30 +++++++++++++++++- tag/gpt/index.xml | 30 +++++++++++++++++- tag/gpu/index.xml | 30 +++++++++++++++++- tag/ia/index.xml | 30 +++++++++++++++++- tag/offline/index.xml | 30 +++++++++++++++++- tag/ollama/index.xml | 30 +++++++++++++++++- tag/prompt/index.xml | 30 +++++++++++++++++- tag/terminal/index.xml | 30 +++++++++++++++++- 17 files changed, 349 insertions(+), 13 deletions(-) create mode 100644 post/ollama/neofetch.png create mode 100644 post/ollama/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp create mode 100644 post/ollama/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp create mode 100644 post/ollama/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e8cff4527c8809eac29d96bc9cf8a763.webp diff --git a/index.json b/index.json index 05dedf65..f39edebd 100644 --- a/index.json +++ b/index.json @@ -20,4 +20,4 @@ - [{"authors":null,"categories":null,"content":"Leonardo Grando is a Brazilian Assistant Professor at UNASP and a Technology Ph.D. candidate at University of Campinas (UNICAMP). Specializing in complex systems, agent-based simulations (ABMS), artificial intelligence (AI), and the Internet of Things (IoT), I focus on developing cutting-edge machine learning models and programming solutions.\nWith expertise in leading technologies like NetLogo, Python, R, LaTeX,Cyber security, Web Development, Data Bases, and Linux, my current Ph.D. research is centered on IoT device swarms (UAVs) for perpetual flight, leveraging agent-based modeling for efficiency. This involves using NetLogo for simulation and Python and R for advanced data mining.\nPreviously, I transitioned from a career in the automotive industry, where I focused on productivity improvements, into the academic field. Since 2019, I have contributed to data science, teaching, and research, including experience as a teacher at the fundamental high school to undergraduate level.\nFollow me in Mastodon and my Telegram Channel\nDownload my Resume .\nBaixe meu Currículo .\n","date":1702339200,"expirydate":-62135596800,"kind":"term","lang":"en","lastmod":1702339200,"objectID":"2525497d367e79493fd32b198b28f040","permalink":"","publishdate":"0001-01-01T00:00:00Z","relpermalink":"","section":"authors","summary":"Leonardo Grando is a Brazilian Assistant Professor at UNASP and a Technology Ph.D. candidate at University of Campinas (UNICAMP). Specializing in complex systems, agent-based simulations (ABMS), artificial intelligence (AI), and the Internet of Things (IoT), I focus on developing cutting-edge machine learning models and programming solutions.","tags":null,"title":"Leonardo Grando","type":"authors"},{"authors":[],"categories":[],"content":"Lendo artigo da Nature fiquei preocupado em relação a privacidade e o uso de meus dados quando utilizandos os LLMs, como por exemplo o Chat-GPT, Gemini e o CoPilot. Sem contar que estas ferramentas nescessitam de acesso a internet. Alguns sites como o Hugging Face permitem testar alguns usos destas ferramentas ferramentas utilizando uma biblioteca para a linguagem Python, como eu já descrevi em uma postagem anterior.\nMas como utilizar estas ferramentas como se fosse abrir um site e conversar com elas? Eu queria algo mais completo e como sou usuário Linux (uso o Pop_OS! 20.04), encontrei este post muito bem explicado de como rodar uma LLM off-line no Linux e resolvi replicar, e conto a experiência aqui neste post.\nO Ollama é uma ferramenta que facilita o processo de baixar e rodar os modelos LLMs de código aberto. Ele pode ser instalado no Windows, MacOS e o Linux. Apenas seguir o procedimento de instalação presente no site deles.\nNo meu caso utilizei o comando abaixo, mas recomendo que você siga o procedimento descrito pelo site pois o mesmo pode alterar conforme novas atualizações.\nRepetindo: siga o procedimento de instalação conforme descrito no site deles, não este daqui.\ncurl -fsSL https://ollama.com/install.sh | sh O código acima irá baixar o Ollama em sua máquina e rodar o script de instalação. Você pode auditar o script de instalação aqui\nA minha máquina é um notebook Acer Nitro que adquiri no final de 2020. Ele possui um Core i5 9300H, 16 GB de RAM e uma GPU Nvidia Geforce 1650. O que fica interessante, pois o Ollama reconheceu a GPU.\nNa postagem que usei como referência para instalar, o autor descreve que o Notebook dele não possui uma GPU discreta, o que influenciou no desempenho. E o modelo escolhido vai também influenciar.\nHora de testar se o Ollama está rodando, num browser digite:\nAqui mostrou que está funcionando.\nAgora é hora de baixar o modelo LLM. No site existe vários modelos. Já testei o llama3.1. Este modelo desenvolvido pela Meta e que possui três níveis de parâmetros 8, 70 e 405 bilhões de parâmetros. Acabei escolhendo o modelo de 8B. São aproximadamente 4.7 GB utilizado de armazenamento. Mas ai fica o critério de cada um. Para este post vou apresentar o processo de instalação do modelo phi3.5 da Microsoft.\nPara dar um “pull” em um modelo LLM desejado, utiliza-se o comando:\nollama pull \u0026lt;Nome_da_LLM\u0026gt; Então para baixar e instalar o modelo phi3.5 da Microsoft.\nollama pull phi3.5 Agora vamos listar as imagens que estão presentes no seu computador.\nollama list Para rodar uma das LLMs com o código:\nollama run \u0026lt;Nome_da_LLM\u0026gt; No caso da Phi3\nollama run phi3.5 Mas antes de tudo, para fins de demostração, vou garantir que não está ocorrendo comunicação com a internet:\nAqui vou pedir para que ele me gere um código Python para connectar a uma base do MySQL:\nNão vou me extender na utilização dele ou de outro modelo, mas é possível utilizar o próprio terminal para conversar com a LLM, e existem formas de conversar via interface gráfica, o que fica para um próximo post.\nAgora para avaliar o uso computacional da minha máquina, vou utilizando o utilitário Nvidia-smi em que é possivel ver o quanto ele está utilizando os recursos da GPU\nE em relação ao uso computacional da CPU e do consumo de memória RAM ele não ficou “tão pesado”, ,as lembrando que o Phi3.5 é um modelo particularmente pequeno. O print abaixo apresenta o consumo computacional durante uma inferencia:\nAgora para sair do Ollama, basta digitar no prompt:\n/bye E para gerenciar e deletar os modelos LLMs, é possivel listar e solicitar a remoção da imagem. PS: peço desculpas na imagem abaixo por que eu digitei um comando errado, por isto ocultei o mesmo, para evitar confusão.\nollama rm \u0026lt;nome_da_LLM\u0026gt; Este tutorial aborda apenas alguns aspectos do uso do Ollama, o tutorial que serviu como base para este experimento possui mais informações, como utilizar a interface gráfica com Docker e também como desinstalar o Ollama. Assim você tem um assistente local para lhe ajudar em tarefas simples. Ontem eu testei o uso do Llamma 3.1 para criar um banco de dados no MySQL e para implementar um código Python para interagir com este banco de dados e o código proposto funcionou. Mas é preciso testar mais.\nSucesso a todos!\n","date":1726963200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1727017760,"objectID":"ddea2163018f2b9dbff519740e00976c","permalink":"https://lgrando1.github.io/post/ollama/","publishdate":"2024-09-22T00:00:00Z","relpermalink":"/post/ollama/","section":"post","summary":"Como rodar uma Ferramenta LLM Off-line no Linux","tags":["GPT","Ollama","prompt","enginnering","IA","AI","Offline","GPU","terminal"],"title":"Usando uma Ferramenta LLM no Linux de Forma Offline","type":"post"},{"authors":[],"categories":[],"content":"Realizei recentemente o curso Prompt Engineering for ChatGPT e gostaria de compartilhar algumas anotações que realizei durante o mesmo.\nEstas ferramentas não podem ser consideradas como fonte de fatos, mas são excelentes como suporte para ideias e quem sabe para tirar da gaveta aquela ideia de um livro.\nO objetivo desta série é criar postagens com quatro estratégias por post. Estou utilizando como exemplo o Chat-GPT em sua versão grátis, mas você pode testar em qualquer outra ferramenta.\nCaso queira conhecer melhor o funcionamento destas ferramentas, recomendo o texto do Stephen Wolfram e o curso Prompt Engineering for ChatGPT que pode ser auditado gratuitamente no Coursera.\nOs links incluem exemplos de cada item.\n1 - São ferramentas estocásticas, por isto pode não ocorrer repetitividade nas respostas, já que a sua resposta depende de como elas foram treinadas: Conforme você realiza o prompt, as ferramentas podem responder de formas diferentes, por isto é importante o refino da sua questão e testar várias estratégias.\nAinda considerando a pergunta, quantos prêmios Nobéis o Brasil já foi agraciado? O exemplo 1 e o exemplo 2 apresentam respostas distintas para a mesma questão.\n2 - Você pode solicitar a esta ferramenta para que ela aja conforme um personagem (ex: professor, consultor, etc.) e que a resposta seja direcionada para determinado público (jovens da terceira idade, adolescente). A estrutura deste prompt é:\nAja como P e faça A\nOnde P é igual ao personagem que você deseja e A ação que você espera dele.\nNeste exemplo, vou pedir para ele agir como um professor de Línguas, depois vou pedir para ele explicar o meu erro usando um exemplo de obra literária e depois para ele contextualizar um assunto atual para um cidadão do ano 1700.\n3 - Você pode enviar novas informações para o Prompt. Estas ferramentas possuem uma limitação do processo de treinamento. Você pode fornecer novas informações para que ele possa aprimorar a resposta.\nNeste exemplo pedi para ele os presidentes que governaram o Brasil entre os anos 2000 a 2024 e solicitei atualização das informações com o novo presidente.\n4 - Refinamento de questões. Observe que a clareza com que você faz os questionamentos é importante para que você tenha respostas mais próximas do que deseja. Não adianta você pedir: Quais foram os presidentes?, se você quer uma resposta limitada por tempo. Mas você pode pedir para ele como melhorar sua pergunta.\nPor enquanto são estas dicas, vimos que podem ocorrer variações nas respostas, que estas ferramentas podem agir como determinado personagem para atingir um público específico, que você pode treinar a ferramenta localmente com novas informações para que sua resposta seja mais atual e que a própria ferramenta pode lhe ajudar a refinar as suas questões.\n","date":1714176000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1714230560,"objectID":"cc0fdc17dc780828aaabd445e7dbdc1c","permalink":"https://lgrando1.github.io/post/prompt1/","publishdate":"2024-04-27T00:00:00Z","relpermalink":"/post/prompt1/","section":"post","summary":"Alguns padrões para facilitar a utilização do Chat-GPT","tags":["GPT","Chat-GPT","prompt","enginnering","IA","AI"],"title":"Como usar melhor o Chat-GPT e outras ferramentas generativas-Parte 1","type":"post"},{"authors":[],"categories":[],"content":"A plataforma Hugging Face é uma portal onde a comunidade de aprendizado de máquina colabora com modelos, conjunto de dados e aplicações.\nAo acessar o site e clicar no link Models é possível buscar por variados modelos voltados para várias tarefas de aprendizado de máquina visão computacional, processamento natural de linguagem, áudio, dados tabulares, aprendizado por reforço e outros tipos.\nNeste post apresentaremos uma introdução de como utilizar estas bibliotecas em sua máquina (ou no Google Colab). Como exemplo é demostrado a realização de duas tarefas: o preenchimento de mascaras de texto (completar um espaço de um texto) e o resumo de um texto.\nSão dois modelos/exemplos simples, mas o objetivo é realmente despertar a curiosidade em conhecer mais sobre esta plataforma.\nAlgumas considerações:\nAo baixar o modelo em sua maquina, alguns modelos são grandes, como o segundo modelo deste tutorial que possui mais do que 1,5 GB. Neste link é possível ver como gerenciar o cache destes modelos; Se atente ao modelo que você vai testar, pois já foram encontrados problemas de segurança; Se atente também nas licenças de conteúdo dos modelos e também possíveis dependências. Se atente a documentação presente em cada página dos modelos; Alguns modelos de aprendizados de máquinas exigem bastante recursos computacionais, ao escrever este post, várias vezes o Jupyter acabou resetando. Apenas para comparativo, este computador é um Core i5 de nona geração (Intel i5 - 9300H) e 8 GB de RAM. Infelizmente ainda não consegui ativar a GPU para tarefas de Machine Learning no Linux. No Google Colab é possível ativar o suporte ao GPU mesmo no tier grátis. Alertas feitos, vamos aos modelos:\nPrimeiro é necessário a biblioteca Transformers para poder baixar e treinais os modelos pré treinados.\nNo momento da escrita deste post estão disponíveis 564772 modelos.\nAqui esta presente a documentação de como instalar esta biblioteca.\nimport transformers from transformers import pipeline #Apenas para suprimir erros, não nescessário. import logging logging.getLogger(\u0026#34;transformers\u0026#34;).setLevel(logging.ERROR) Tarefa 1 - preenchimento de mascaras Para realizar a tarefa de preenchimento de mascaras, utilizaremos o modelo BERTimbau Base (aka “bert-base-portuguese-cased” [1]\nIremos utilizar neste caso a versão base.\nA tarefa realizada será “fill-mask” e iremos pedir que ele devolva 5 respostas para a frase “Batatinha quando nasce, esparrama pelo [MASK]” onde [MASK] é o texto que será preenchido pelo token.\n[1] SOUZA, Fábio e NOGUEIRA, Rodrigo e LOTUFO, Roberto. BERTimbau: pretrained BERT models for Brazilian Portuguese. 2020, [S.l: s.n.], 2020.\nA primeira linha do código abaixo indicar a tarefa a ser executada e o modelo a ser utilizado e a segunda linha aplica o modelo para o texto escolhido.\nmascarar = pipeline(\u0026#34;fill-mask\u0026#34;, model=\u0026#34;neuralmind/bert-base-portuguese-cased\u0026#34;) texto = mascarar(\u0026#34;Batatinha quando nasce, esparrama pelo [MASK]\u0026#34;) for x in range(len(texto)): print(texto[x]) {\u0026#39;score\u0026#39;: 0.3925571143627167, \u0026#39;token\u0026#39;: 8105, \u0026#39;token_str\u0026#39;: \u0026#39;chão\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo chão\u0026#39;} {\u0026#39;score\u0026#39;: 0.10256581008434296, \u0026#39;token\u0026#39;: 1831, \u0026#39;token_str\u0026#39;: \u0026#39;corpo\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo corpo\u0026#39;} {\u0026#39;score\u0026#39;: 0.05736977979540825, \u0026#39;token\u0026#39;: 1147, \u0026#39;token_str\u0026#39;: \u0026#39;mundo\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo mundo\u0026#39;} {\u0026#39;score\u0026#39;: 0.047487251460552216, \u0026#39;token\u0026#39;: 388, \u0026#39;token_str\u0026#39;: \u0026#39;ar\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo ar\u0026#39;} {\u0026#39;score\u0026#39;: 0.023149045184254646, \u0026#39;token\u0026#39;: 9169, \u0026#39;token_str\u0026#39;: \u0026#39;rosto\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo rosto\u0026#39;} Observe nas resposta acima que o maior “score” foi para a frase que contém o token “chão”.\nTarefa 2 - Resumo de textos Para realizar o processo de resumo de texto (“summarization”), iremos utilizar como exemplo o modelo facebook/bart-large-cnn [2]\nUtilizaremos o texto que está presente na própria página do modelo.\n[2] LEWIS, Mike e colab. BART: Denoising sequence-to-sequence pre-training for natural language generation, translation, and comprehension. CoRR, v. abs/1910.13461, 2019. Disponível em: http://arxiv.org/abs/1910.13461.\nresumir = pipeline(\u0026#34;summarization\u0026#34;, model=\u0026#34;facebook/bart-large-cnn\u0026#34;) texto = \u0026#34;\u0026#34;\u0026#34;The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building, and the tallest structure in Paris. Its base is square, measuring 125 metres (410 ft) on each side. During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest man-made structure in the world, a title it held for 41 years until the Chrysler Building in New York City was finished in 1930. It was the first structure to reach a height of 300 metres. Due to the addition of a broadcasting aerial at the top of the tower in 1957, it is now taller than the Chrysler Building by 5.2 metres (17 ft). Excluding transmitters, the Eiffel Tower is the second tallest free-standing structure in France after the Millau Viaduct.\u0026#34;\u0026#34;\u0026#34; resumo = …","date":1711238400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1711306800,"objectID":"e6f974f25e8c4413859549a7cda3679a","permalink":"https://lgrando1.github.io/post/hface/","publishdate":"2024-03-24T00:00:00Z","relpermalink":"/post/hface/","section":"post","summary":"Criando um pipeline para testar os modelos presentes no Hugging Faces","tags":["Hugging Face","IA","ML","Generativos","Python"],"title":"Utilizando a plataforma Hugging Face para testar modelos de aprendizado de máquina.","type":"post"},{"authors":[],"categories":[],"content":"Neste post é apresentado uma rotina de aprendizado de máquina supervisionado utilizando a biblioteca TensorFlow para realizar o reconhecimento e classificação de imagens da base de dados MNIST. Esta base de dados consiste em imagens de numeros escritos a mão e seus respectivos rótulos. A idéia deste post é treinar um modelo de rede neural que reconheça os padrões destas imagens e as classifiquem com o respectivo número.\nO conteúdo desta atividade de classificação é composto de:\nImportar as bibliotecas; Importar o conjunto de dados e dividi-los entre base treino e de teste; Aplicar o processo de Hot Encoding nas classes de respostas; Pré-processamento dos dados para que possam ser uitilizados no treinamento da rede; Criação do modelo de rede neural; Treinamento do modelo com os dados de treinamento; Realizar a predição e comparação com os dados de teste. 1. Importação das bibliotecas necessárias, incluindo o TensorFlow import tensorflow as tf import numpy as np tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR) print(\u0026#39;Using TensorFlow version\u0026#39;, tf.__version__) #Processo de hot-encoding from tensorflow.keras.utils import to_categorical #para criar as camadas do modelo de rede neural from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense #para visualizar as imagens from matplotlib import pyplot as plt %matplotlib inline 2024-03-24 10:02:13.310353: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used. 2024-03-24 10:02:13.370354: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used. 2024-03-24 10:02:13.371713: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations. To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags. 2024-03-24 10:02:14.341836: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT Using TensorFlow version 2.13.1 2: Importar a base de dados e dividi-la em bases treino e de teste A própria biblioteca Tensorflow já disponibiliza esta base.\nfrom tensorflow.keras.datasets import mnist (x_train, y_train),(x_test, y_test) = mnist.load_data() Dimensões dos arrays importados A base de dados MNIST é composta por 70000 imagens em escala de cinza de dimensões de 28 por 28 e seus respectivos rótulos. Neste trabalho esta base foi dividida com 60000 instancias de treino e 10000 de teste para poder verificar a performance do treinamento. Cada valor dos pixels representam um valor integral (entre 0 a 255) na escala de cinza.\nprint(\u0026#34;x_train shape\u0026#34;, x_train.shape) print(\u0026#34;y_train shape\u0026#34;, y_train.shape) print(\u0026#34;x_test shape\u0026#34;, x_test.shape) print(\u0026#34;y_test shape\u0026#34;, y_test.shape) x_train shape (60000, 28, 28) y_train shape (60000,) x_test shape (10000, 28, 28) y_test shape (10000,) Visualizando uma imagem presente na base de treino # Apresentando uma imagem da base de treino. plt.imshow(x_train[1], cmap=\u0026#34;binary\u0026#34;) plt.show() Para ver o seu rótulo de treino: # O valor da classe na posição 1 print(y_train[0]) #valor 5 print(y_train[1]) #valor 0 5 0 Para ver todos os rótulos presentes na base de treino: # Os valores presentes na classe de treino print(set(y_train)) {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 3 - Processo de hot encoding nas classes. Para que as classes de respostas possam passar pelo processo de treinamento e de testes, é necessario aplicar o processo de pré-processamento de hot encoding (criação de variaveis dummies) nas classes de respostas.\nCodificando os rótulos y_train_encoded = to_categorical(y_train) y_test_encoded = to_categorical(y_test) Conhecendo as dimensões das bases de dados codificadas print(\u0026#34;y_train_encoded shape\u0026#34;, y_train_encoded.shape) print(\u0026#34;y_test_encoded shape\u0026#34;, y_test_encoded.shape) y_train_encoded shape (60000, 10) y_test_encoded shape (10000, 10) Visualizando um rótulo codificado. print(y_train_encoded[0]) #valor 5 print(y_train_encoded[1]) #valor 0 [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.] [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.] 4 Pré-processamento. Transformar a matriz de 2 dimensões (28x28 pixels com valores de 0 a 255) em um uníco vetor de dimensão 784. x_train_reshaped = np.reshape(x_train, (60000, 784)) x_test_reshaped = np.reshape(x_test, (10000, 784)) print(\u0026#34;x_train_reshaped_shape\u0026#34;, x_train_reshaped.shape) print(\u0026#34;x_test_reshaped_shape\u0026#34;, x_test_reshaped.shape) x_train_reshaped_shape (60000, 784) x_test_reshaped_shape (10000, 784) Normalização dos a x_mean = np.mean(x_train_reshaped) x_std = np.std(x_train_reshaped) epsilon = 1e-10 x_train_norm = (x_train_reshaped-x_mean) / (x_std + epsilon) x_test_norm = (x_test_reshaped-x_mean) / (x_std + epsilon) 5: Criando o modelo de rede neural. Modelo será composto de uma camada de entrada, uma camada interna oculta e uma camada de saída. model = Sequential([ Dense(56, …","date":1711152000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1711220400,"objectID":"6d6179f9140fcb8ab89a3df010a497ad","permalink":"https://lgrando1.github.io/post/pythoncv/","publishdate":"2024-03-23T00:00:00Z","relpermalink":"/post/pythoncv/","section":"post","summary":"Classificação imagens utilizando rede neurais e Python","tags":["TensorFlow","IA","ML","Imagens","classificação","Python"],"title":"Classificação de imagens com o TensorFlow.","type":"post"},{"authors":[],"categories":[],"content":"2024/02/26 Thinking in a society without centralization and auto-regulated, like the ants and insects societies; Create a way to summarize society’s problems TODO list. Request to everybody to stop talk about politics and start thinking about these problems; Think how to use Artificial Intelligence to improve society care and not only profits. Give a way to person live without need be online. ","date":1708905600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1708960160,"objectID":"27dc9bd42ebab287eca8667eea83805c","permalink":"https://lgrando1.github.io/ideas/","publishdate":"2024-02-26T00:00:00Z","relpermalink":"/ideas/","section":"","summary":"Some ideas to a better world","tags":["ideas"],"title":"Ideas","type":"page"},{"authors":[],"categories":null,"content":"","date":1702387800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1702387800,"objectID":"7d197cf7e9f275a966f656037893aa7f","permalink":"https://lgrando1.github.io/talk/wsc-2023/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/talk/wsc-2023/","section":"event","summary":"Presenting the Extend Abstract of our work \"MODELING AND SIMULATION FOR FARMING DRONE BATTERY RECHARGING\" in the Simulation Around the World (SATW) Track.","tags":["Agent-Based","Simulation","presentation","Drones","Farm"],"title":"WSC 2023","type":"event"},{"authors":["Juan F Galindo Jaramillo","Leonardo Grando","Jose Roberto Emiliano Leite","Edson L. Ursini"],"categories":null,"content":"","date":1702339200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1702339200,"objectID":"bfb66ebafcdfcdbb5446c7ff6a157428","permalink":"https://lgrando1.github.io/publication/jaramillo-2023/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/publication/jaramillo-2023/","section":"publication","summary":"Using Agent-Based Models (ABM) for disease incidence may help decision-making processes. This work shows an ABM for cervical cancer detection. Our results show the relevance of social indicators.","tags":["Cancer","Simulation","Agent-Based","Detection"],"title":"Agent-Based Model For Analysis of Cervical Cancer Detection","type":"publication"},{"authors":["Leonardo Grando","Juan F Galindo Jaramillo","Jose Roberto Emiliano Leite","Edson L. Ursini"],"categories":null,"content":"","date":1702339200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1702339200,"objectID":"742878604d28f8a3e34a0a21b3e871e8","permalink":"https://lgrando1.github.io/publication/grando-2023/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/publication/grando-2023/","section":"publication","summary":"The Connected Farm is composed of several elements that communicate with each other through a 4G/5G Radio Base Station (RBS) placed in the middle of the farm. This RBS is connected to the Internet, allowing communication for all kinds of autonomous devices, performing uninterrupted tasks. This work simulates the Connected Farm environment for an autonomous drone. Our model intends to define when each drone needs to recharge its batteries, with no collusion regarding this recharging decision, reducing the drone’s battery usage due to the absence of this communication.","tags":["Drones","Simulation","Agent-Based","Precision Agriculture"],"title":"Modeling and Simulation for Farming Drone Battery Recharging","type":"publication"},{"authors":[],"categories":[],"content":"Desenvolvimentos dos componentes da Série de Taylor Para expandir computacionalmente é possivel utilizar a função sympy.series.\nA documentação desta função do Sympy pode ser encontrada aqui\nO código fonte deste Jupyter Notebook pode ser encontrado aqui\n# importando as funções nescessarias para a expansão das funções: from sympy import Symbol, cos, series, E, sin, ln, cosh, sinh z = Symbol(\u0026#39;z\u0026#39;) Series de Taylor Utiliza-se a seguinte expressão para o desenvolvimento das expressões das séries de Taylor:\n$f(z)=\\sum_{k=0}^{\\infty}(z-a)^k\\frac{f^{k}(a)}{k!}$\nDesenvolva as séries de Taylor para as funções a seguir nos pontos determinados:\nA) $f(z) = e^z$ para $a = 0$ Calculando as derivadas:\n$f^0(z)=e^z \\Rightarrow f^0(0) = 1$\n$f^1(z)=e^z \\Rightarrow f^1(0) = 1$\n$f^2(z)=e^z \\Rightarrow f^2(0) = 1$\n$f^3(z)=e^z \\Rightarrow f^3(0) = 1$\n$f^4(z)=e^z \\Rightarrow f^4(0) = 1$\nPara k = 0\n$(z-0)^0 \\frac{f^0(0)}{0!} = 1$\nPara k = 1\n$(z-0)^1 \\frac{f^1(0)}{1!} = z$\nPara k = 2\n$(z-0)^2 \\frac{f^2(0)}{2!} = \\frac{z^2}{2!}$\nPara k = 3\n$(z-0)^3 \\frac{f^3(0)}{3!} = \\frac{z^3}{3!}$\nPara k = 4\n$(z-0)^4 \\frac{f^4(0)}{4!} = \\frac{z^4}{4!}$\nEntão:\n$f(z) = 1 + z + \\frac{z^2}{2!} + \\frac{z^3}{3!} + \\frac{z^4}{4!}… $\n#Computacionalmente: series(E**(z),z) $\\displaystyle 1 + z + \\frac{z^{2}}{2} + \\frac{z^{3}}{6} + \\frac{z^{4}}{24} + \\frac{z^{5}}{120} + O\\left(z^{6}\\right)$\nB) $f(z) = \\cos(z)$ para $a = 0$ Calculando as derivadas:\n$f^0(z)=\\cos(z) \\Rightarrow f^0(0) = 1$\n$f^1(z)=-\\sin(z) \\Rightarrow f^1(0) = 0$\n$f^2(z)=-\\cos(z) \\Rightarrow f^2(0) = -1$\n$f^3(z)=\\sin(z) \\Rightarrow f^3(0) = 0$\n$f^4(z)=\\cos(z) \\Rightarrow f^4(0) = 1$\nPara k = 0\n$(z-0)^0 \\frac{f^0(0)}{0!} = 1$\nPara k = 1\n$(z-0)^1 \\frac{f^1(0)}{1!} = 0$\nPara k = 2\n$(z-0)^2 \\frac{f^2(0)}{2!} = -\\frac{z^2}{2!}$\nPara k = 3\n$(z-0)^3 \\frac{f^3(0)}{3!} = 0$\nPara k = 4\n$(z-0)^4 \\frac{f^4(0)}{4!} = -\\frac{z^4}{4!}$\nEntão:\n$f(z) = 1 - \\frac{z^2}{2!} + \\frac{z^4}{4!} … $\n#Computacionalmente: series(cos(z),z) $\\displaystyle 1 - \\frac{z^{2}}{2} + \\frac{z^{4}}{24} + O\\left(z^{6}\\right)$\nC) $f(z) = \\sin(z)$ para $a = 0$ Calculando as derivadas:\n$f^0(z)=\\sin(z) \\Rightarrow f^0(0) = 0$\n$f^1(z)=\\cos(z) \\Rightarrow f^1(0) = 1$\n$f^2(z)=-\\sin(z) \\Rightarrow f^2(0) = 0$\n$f^3(z)=-\\cos(z) \\Rightarrow f^3(0) = -1$\n$f^4(z)=\\sin(z) \\Rightarrow f^4(0) = 0$\n$f^5(z)=\\cos(z) \\Rightarrow f^5(0) = 1$\nPara k = 0\n$(z-0)^0 \\frac{f^0(0)}{0!} = 0$\nPara k = 1\n$(z-0)^1 \\frac{f^1(0)}{1!} = z$\nPara k = 2\n$(z-0)^2 \\frac{f^2(0)}{2!} = 0$\nPara k = 3\n$(z-0)^3 \\frac{f^3(0)}{3!} = -\\frac{z^3}{3!}$\nPara k = 4\n$(z-0)^4 \\frac{f^4(0)}{4!} = 0$\nPara k = 5\n$(z-0)^5 \\frac{f^5(0)}{5!} = \\frac{z^5}{5!}$\nEntão:\n\\box{$f(z) = z - \\frac{z^3}{3!} + \\frac{z^5}{5!} … $\n#Computacionalmente: series(sin(z),z) $\\displaystyle z - \\frac{z^{3}}{6} + \\frac{z^{5}}{120} + O\\left(z^{6}\\right)$\nD) $f(z) = \\frac{1}{z}$ para $a = 1$ Calculando as derivadas:\n$f^0(z)=\\frac{1}{z} \\Rightarrow f^0(1) = 1$\n$f^1(z)=-\\frac{1}{z^2} \\Rightarrow f^1(1) = -1$\n$f^2(z)=\\frac{2}{z^3} \\Rightarrow f^2(1) = 2!$\n$f^3(z)=-\\frac{3!}{z^4} \\Rightarrow f^3(1) = -3!$\n$f^4(z)=\\frac{4!}{z^5} \\Rightarrow f^4(1) = 4!$\nPara k = 0\n$(z-1)^0 \\frac{1}{0!} = 1$\nPara k = 1\n$(z-1)^1 \\frac{-1}{1!} = -(z-1)$\nPara k = 2\n$(z-1)^2 \\frac{2!}{2!} = (z-1)^2$\nPara k = 3\n$(z-1)^3 \\frac{3!}{3!} = -(z-1)^3$\nPara k = 4\n$(z-1)^4 \\frac{4!}{4!} = (z-1)^4$\nEntão:\n$f(z) = 1 -(z-1) + (z-1)^2 - (z-1)^3 + (z-1)^4 … $\n#Computacionalmente: series(1/z, z, 1) $\\displaystyle 2 + \\left(z - 1\\right)^{2} - \\left(z - 1\\right)^{3} + \\left(z - 1\\right)^{4} - \\left(z - 1\\right)^{5} - z + O\\left(\\left(z - 1\\right)^{6}; z\\rightarrow 1\\right)$\nE) $f(z) = \\ln(z)$ para $a = 1$ Calculando as derivadas:\n$f^0(z)= \\ln(z) \\Rightarrow f^0(1) = 0 $\n$f^1(z)=\\frac{1}{z} \\Rightarrow f^1(1) = 1$\n$f^2(z)=-\\frac{1}{z^2} \\Rightarrow f^2(1) = -1$\n$f^3(z)=\\frac{2}{z^3} \\Rightarrow f^3(1) = 2!$\n$f^4(z)=-\\frac{3!}{z^4} \\Rightarrow f^4(1) = -3!$\nPara k = 0\n$(z-1)^0 \\frac{0}{0!} = 0$\nPara k = 1\n$(z-1)^1 \\frac{1}{1!} = (z-1)$\nPara k = 2\n$(z-1)^2 \\frac{-1}{2!} = -\\frac{(z-1)^2}{2}$\nPara k = 3\n$(z-1)^3 \\frac{2!}{3!} = \\frac{(z-1)^3}{3}$\nPara k = 4\n$(z-1)^4 \\frac{3!}{4!} = -\\frac{(z-1)^4}{4}$\nEntão:\n$f(z) = (z-1) -\\frac{(z-1)^2}{2} + \\frac{(z-1)^3}{3} -\\frac{(z-1)^4}{4} … $\n#Computacionalmente: series(ln(z),z, 1) $\\displaystyle -1 - \\frac{\\left(z - 1\\right)^{2}}{2} + \\frac{\\left(z - 1\\right)^{3}}{3} - \\frac{\\left(z - 1\\right)^{4}}{4} + \\frac{\\left(z - 1\\right)^{5}}{5} + z + O\\left(\\left(z - 1\\right)^{6}; z\\rightarrow 1\\right)$\nF) $f(z) = \\cosh(z)$ para $a = 0$ Calculando as derivadas:\n$f^0(z)= \\cosh(z) \\Rightarrow f^0(0) = 1 $\n$f^1(z)= \\sinh(z) \\Rightarrow f^1(0) = 0$\n$f^2(z)= \\cosh(z) \\Rightarrow f^0(0) = 1 $\n$f^3(z)= \\sinh(z) \\Rightarrow f^1(0) = 0$\n$f^4(z)= \\cosh(z) \\Rightarrow f^0(0) = 1 $\nPara k = 0\n$(z-0)^0 \\frac{1}{0!} = 1$\nPara k = 1\n$(z-0)^1 \\frac{0}{1!} = 0$\nPara k = 2\n$(z-0)^2 \\frac{1}{2!} = \\frac{z^2}{2}$\nPara k = 3\n$(z-0)^3 \\frac{0}{3!} = 0$\nPara k = 4\n$(z-0)^4 \\frac{1}{4!} = \\frac{z^2}{4!}$\nEntão:\n$f(z) = 1 + \\frac{z^2}{2} + \\frac{z^4}{4!} … …","date":1700352000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1700420400,"objectID":"d15fba87ee6a9c78cfe2f856904ce216","permalink":"https://lgrando1.github.io/post/complex4/","publishdate":"2023-11-19T00:00:00Z","relpermalink":"/post/complex4/","section":"post","summary":"Expansão tanto algebricamente, quanto utilizando biblioteca Sympy no Python","tags":["Matemática","números","complexos","aprendizagem","Taylor"],"title":"Números Complexos - Pt. 4","type":"post"},{"authors":[],"categories":[],"content":"#importar as bibliotecas import matplotlib.pyplot as plt import numpy as np import cmath plt.rcParams.update({ \u0026#34;text.usetex\u0026#34;: True, \u0026#34;font.family\u0026#34;: \u0026#34;sans-serif\u0026#34;, \u0026#34;font.sans-serif\u0026#34;: \u0026#34;Helvetica\u0026#34;, }) #import sympy from sympy import I, re, im, Abs, arg, conjugate, solve, Symbol, deg, sqrt from sympy import exp, sin, cos, symbols from sympy import exp_polar, pi, I, sqrt # função para plotar o número - Modificado para o Sympy def plotapolar(z): fig, ax = plt.subplots(subplot_kw={\u0026#39;projection\u0026#39;: \u0026#39;polar\u0026#39;}, figsize=(4, 4)) ax.plot(arg(z), abs(z), marker=\u0026#39;o\u0026#39;, markersize=15, color=\u0026#39;red\u0026#39;) ax.quiver(0, 0, float(re(z)), float(im(z)), scale=0.1) plt.show() Lista com exercícios envolvendo números complexos Códigos disponíveis aqui\n1. Expresse $1-\\sqrt{3}i$ na forma polar (faça o gráfico) z = 1-sqrt(3)*I z $\\displaystyle 1 - \\sqrt{3} i$\nabs(z) $\\displaystyle 2$\narg(z) $\\displaystyle - \\frac{\\pi}{3}$\nplotapolar(z) 2. Faça o gráfico de $|z-(1.1+2i)|\u0026lt;0.05$ Expandindo resulta em uma equação da reta,\n$\\sqrt{(x-1.1)^2+(y-2)^2} \u0026lt; 0.05$\nO gráfico abaixo mostra os pontos (pintados) para os pontos solicitados.\n# ponto central do circulo z = 1.1 + 2 theta = np.linspace( 0 , 2 * np.pi , 150 ) #raio do circulo maior, apenas para referencia radius = 0.5 #raio do circulo menor radius1 = 0.05 # Desenhando o circulo maior a = float(re(z)) - radius * np.cos( theta ) b = float(im(z)) - radius * np.sin( theta ) # Desenhando o circulo menor, aberto a1 = float(re(z)) - radius1 * np.cos( theta ) b1 = float(im(z)) - radius1 * np.sin( theta ) # Pintando a area desejada Drawing_colored_circle = plt.Circle(( float(re(z)) , float(im(z)) ), radius1 ) # Plotando a figura: figure, axes = plt.subplots( 1 ) axes.plot( a, b ) axes.plot( a1, b1 , linestyle = \u0026#39;dotted\u0026#39;) axes.add_artist( Drawing_colored_circle ) axes.set_aspect( 1 ) axes.set_xlabel(\u0026#34;Real (z)\u0026#34;) axes.set_ylabel(\u0026#34;Imag (z)\u0026#34;) #para criar a anotação e a seta indicativa axes.annotate(r\u0026#39;$\\varepsilon \u0026lt; 0.05$\u0026#39;, (float(re(z))+0.01, float(im(z))+0.01), xytext=(0.75, 0.6), textcoords=\u0026#39;axes fraction\u0026#39;, arrowprops=dict(facecolor=\u0026#39;black\u0026#39;, shrink=0.05), fontsize=12, horizontalalignment=\u0026#39;right\u0026#39;, verticalalignment=\u0026#39;top\u0026#39;) #plt.title( \u0026#39;Parametric Equation Circle\u0026#39; ) plt.show() 3 - Faça o gráfico de $\\Re(z) \\geq 1$ se $z = x + yi$\nEntão $\\Re(z) = x$ e desta forma seria a área maior e igual a 1.\nSão os pontos ilustrados abaixo:\n# Código apenas para representação: fig, ax = plt.subplots() plt.vlines(x=1, ymin = 0, ymax = 2, color=\u0026#39;r\u0026#39;, linestyle=\u0026#39;solid\u0026#39;) ax.set(xlim=(0, 2), xticks=np.arange(0, 2), ylim=(0, 2), yticks=np.arange(0, 2) ) y = np.array([0, 2]) x1 = np.array([2,2]) x2 = np.array([1,1]) ax.set_xlabel(\u0026#34;Real (z)\u0026#34;) ax.set_ylabel(\u0026#34;Imag (z)\u0026#34;) ax.fill_betweenx(y, x1, x2, where=(x1 \u0026gt; x2), color=\u0026#39;C0\u0026#39;, alpha=0.3) plt.show() 4 - Ache a imagem da linha $Re(z) = 1$ sob o plano $f(z) = z^2$. Onde $f(z)$ dá origem à imagem em $f(w)$. Faça o gráfico $w = f(z) = z^2 = (x+yi)^2 = x^2-y^2+2xyi$\n$u = x^2-y^2$ $v = 2xy$\nComo $\\Re(z) = x$ então neste caso para $x = 1$\nResultando em:\n$v = 2y \\rightarrow \\frac{v}{2}$\n$u = 1-y^2 \\rightarrow 1- \\frac{v^2}{4}$\nplt.figure(figsize = ((12,5))) ax1 = plt.subplot(1,2,1) ax2 = plt.subplot(1,2,2) ax1.vlines(x=1, ymin = -2, ymax = 2, color=\u0026#39;r\u0026#39;, linestyle=\u0026#39;solid\u0026#39;) ax1.set_title(\u0026#34;Plano z\u0026#34;) ax1.set_xlabel(\u0026#34;Real (z)\u0026#34;) ax1.set_ylabel(\u0026#34;Imag (z)\u0026#34;) v = np.arange(-2, 2, 0.01) u = 1 - (v**2)/4 ax2.plot(u,v) ax2.set_title(\u0026#34;Plano w\u0026#34;) ax2.set_xlabel(\u0026#34;Real(w) = u(x,y)\u0026#34;) ax2.set_ylabel(\u0026#34;Imag(w) = v(x,y)\u0026#34;) Text(0, 0.5, \u0026#39;Imag(w) = v(x,y)\u0026#39;) 5. Diferencie: Lembrando:\nSuponha que $f$ e $g$ são diferenciaveis em $z$, e $h$ é diferenciavel em $f(z)$. Sendo $c \\in \\mathbb{C}$\n1 - $(cf)’(z) = cf’(z)$;\n2 - $(f+g)’(z) = f’(z)+g’(z)$;\n3 - Regra do Produto:\n$(f \\cdot g)’(z) = f’(z)g(z)+f(z)g’(z)$;\n4 - Regra do quociente:\n$(\\frac{f}{g})’(z) = \\frac{g(z)f’(z)-f(z)g’(z)}{g(z)^2}$, para $g(z) \\neq 0$;\n5 - Regra da cadeia:\n5 - $(h \\circ f)’(z) = h’(f(z))f’(z)$.\na) $f(z) = 3z^4-5z^3+2z$\nimport sympy x, y, a, b, c, z = sympy.symbols(\u0026#39;x y a b c z\u0026#39;) expr = 3*z**4-5*z**3+2*z expr $\\displaystyle 3 z^{4} - 5 z^{3} + 2 z$\n# Importar o módulo de derivadas from sympy import diff diff(expr,z) $\\displaystyle 12 z^{3} - 15 z^{2} + 2$\nb) $f(z) = \\frac{z^2}{4z+1}$\nPara resolver, não esquecer:\nUtilizar a regra do quociente lembrar que $g(z) \\neq 0$ exp1 = z**2 / (4*z+1) exp1 $\\displaystyle \\frac{z^{2}}{4 z + 1}$\ndiff(exp1,z) $\\displaystyle - \\frac{4 z^{2}}{\\left(4 z + 1\\right)^{2}} + \\frac{2 z}{4 z + 1}$\nPara $z \\neq -\\frac{1}{4}$\n6. Mostre que $f(z) = x + 4iy$ não é diferenciável em nenhum ponto; Forma 1 - Teorema de Cauchy-Reimann\nu = x\ny = 4i\nu = x v = 4*y diff(u,x) == diff(v,y) False diff(u,y) == -diff(v,x) True Forma 2 - Fazendo $\\Delta z = \\Delta x + i \\Delta y$\nPortanto:\n$\\lim_{\\Delta z \\to 0} \\frac{ f(z+\\Delta z)-f(z)}{\\Delta z}$\nResultando em:\n$f(z + \\Delta z) - f(z) = x + \\Delta x + 4i(y+ \\Delta y) - x - 4iy = \\Delta x + 4i \\Delta y$\ne\n$\\lim_{\\Delta z \\to 0}\\frac{\\Delta x + 4i\\Delta y}{\\Delta x + i\\Delta y}$\nQuando $\\Delta z \\to 0$ ao …","date":1699142400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1699210800,"objectID":"04e7252706ebbfb129825c6a8e2a4a5c","permalink":"https://lgrando1.github.io/post/complex3/","publishdate":"2023-11-05T00:00:00Z","relpermalink":"/post/complex3/","section":"post","summary":"Tópico: Operações básicas e derivadas","tags":["Matemática","números","complexos","aprendizagem","exercícios"],"title":"Números Complexos - Pt. 3","type":"post"},{"authors":[],"categories":[],"content":"Pt 2 - Forma Polar/Exponencial/Funções/Cauchy-Riemann A Parte 1 deste série considera as operações com as coordenadas cartesianas;\nOperações Básicas com Números Complexos 1.1 - Utilizando o Python para efetuar os cálculos Representação Polar/Exponencial 2.1 Multiplicação e divisão de números polares 2.2 - Utilizando o Sympy Raízes de z Função complexa Equações de Cauchy-Riemann Código disponível aqui: https://github.com/lgrando1/Notas_Numeros_Complexos/\n1. Operações Básicas com Números Complexos Considere os números complexos abaixo:\na = 2 + 3j\nb = 1j\nc = 4 + 1j\nd = 5 - 2j\nCalcule:\n1a) a+b =\n1b) a+c =\n1c) d-a =\n1d) b-d =\n1e) a * b =\n1f) b * c =\n1g) a / c =\n1h) d / c =\nCalcule do valor absoluto (módulo) dos números complexos:\n1i) |a| =\n1j) |b - d| =\nCalcule o conjugado dos números complexos:\n1l) $\\bar{c}$\n1m) $\\overline{c+b}$\n1.1 - Utilizando o Python para efetuar os cálculos: # Definindo os números a = 2 + 3j b = 1j c = 4 + 1j d = 5 - 2j print(\u0026#34;1a:\u0026#34;, a+b) 1a: (2+4j) print(\u0026#34;1b:\u0026#34;,a+c) 1b: (6+4j) print(\u0026#34;1c:\u0026#34;,d-a) 1c: (3-5j) print(\u0026#34;1d:\u0026#34;,b-d) 1d: (-5+3j) print(\u0026#34;1e:\u0026#34;,a * b) 1e: (-3+2j) print(\u0026#34;1f:\u0026#34;,b * c) 1f: (-1+4j) print(\u0026#34;1g:\u0026#34;,a / c) 1g: (0.6470588235294118+0.5882352941176471j) print(\u0026#34;1h:\u0026#34;,d / c) 1h: (1.0588235294117647-0.7647058823529411j) print(\u0026#34;1i:\u0026#34;,abs(a)) 1i: 3.605551275463989 print(\u0026#34;1j:\u0026#34;,abs(b - d)) 1j: 5.830951894845301 print(\u0026#34;1l:\u0026#34;,c.conjugate()) 1l: (4-1j) print(\u0026#34;1m:\u0026#34;,c.conjugate()+b.conjugate()) 1m: (4-2j) OBS: Sugestões para gráficos em Python: https://python-graph-gallery.com/\nFunção no Python para plotar um número utilizando a biblioteca Matplotlib\n#importar as bibliotecas import matplotlib.pyplot as plt import numpy as np #criando uma função para plotar def plotargant(x): ponto = np.array(x) x = ponto.real y = ponto.imag fig, ax = plt.subplots(1, figsize=(6, 4)) ax.scatter(x, y, s = 100, color = \u0026#39;red\u0026#39;) ax.quiver(0, 0, x,y, units=\u0026#39;xy\u0026#39;, angles=\u0026#39;xy\u0026#39;, scale=1) ax.spines[\u0026#39;left\u0026#39;].set_position(\u0026#39;zero\u0026#39;) ax.spines[\u0026#39;right\u0026#39;].set_color(\u0026#39;none\u0026#39;) ax.spines[\u0026#39;bottom\u0026#39;].set_position(\u0026#39;zero\u0026#39;) ax.spines[\u0026#39;top\u0026#39;].set_color(\u0026#39;none\u0026#39;) ax.set_ylabel(\u0026#39;Im\u0026#39;) ax.set_xlabel(\u0026#39;Re\u0026#39;) #ax.show() print(\u0026#34;Gráfico ponto a\u0026#34;) plotargant(a) Gráfico ponto a print(\u0026#34;Gráfico 1l\u0026#34;) plotargant(c.conjugate()) Gráfico 1l 2. Representação Polar/Exponencial Converta os números a seguir em polar: 2a) a = 2 + 3j\n2b) b = 1j\n2c) c = 4 + 1j\n2d) d = 5 - 2j\nA fórmula de Euler:\n$e^{j\\theta} = \\cos\\theta + j\\sin\\theta$\nPode ser utilizada para representar um número complexo na fórmula polar:\n$z = re^{j\\theta} = r\\cos\\theta+jr\\sin\\theta = r(\\cos\\theta+j\\sin\\theta)$\nLembrando: $|z| = r = \\sqrt{x^2 + y^2} = \\sqrt{z\\bar{z}}$\nO principal argumento do ângulo: $-\\pi \u0026lt; \\theta \u0026lt; \\pi$.\nOutros valores possíveis para $\\theta = \\theta + 2n\\pi$, onde $n = \\pm 1, \\pm 2, …$\nO número complexo $z = 1+1i$ pode ser representado das seguintes formas:\nForma cartesiana: $z = 1+1i$ Forma polar: $\\sqrt{2}(\\cos(\\frac{\\pi}{4}) + i \\sin(\\frac{\\pi}{4}))$ Forma exponencial: $\\sqrt{2}e^{i\\pi/4}$ #definindo os números nos Python: a = 2 + 3j b = 1j c = 4 + 1j d = 5 - 2j #importando a biblioteca cmath (para cálculos dos complexos) import cmath cmath.polar(a) (3.605551275463989, 0.982793723247329) cmath.polar(b) (1.0, 1.5707963267948966) Neste caso (2a) o número 2 + 3j, pode ser representado como o valor\naproximado de r = 3,60 e o argumento de 0,98 radianos ou melhor (56,3 graus).\nUtilizando a notação de Euler:\n$a = 2+3j = 3.6e^{j0.98}=3.6(\\cos{0.98}+j\\sin{0.98})$\nComandos interessantes para o cmath:\n#Para calcular o modulo de a: abs(a) 3.605551275463989 #para obter o valor do angulo Theta: cmath.phase(a) 0.982793723247329 # Importar a biblioteca math (para calcular o arco tangente) import math #que é igual a: math.atan(a.imag/a.real) 0.982793723247329 #convertendo para graus round(math.degrees(cmath.phase(a)), 1) 56.3 # Realizando o caminho inverso # a forma polar para a forma algébrica # r*(cos(theta) + i sen(theta) para # (x+yj) abs(a) * (math.cos(cmath.phase(a)) + math.sin(cmath.phase(a))*1j) (2+3j) # função para plotar o número def plotapolar(z): fig, ax = plt.subplots(subplot_kw={\u0026#39;projection\u0026#39;: \u0026#39;polar\u0026#39;}, figsize=(4, 4)) ax.plot(cmath.phase(z), abs(z), marker=\u0026#39;o\u0026#39;, markersize=15, color=\u0026#39;red\u0026#39;) ax.quiver(0, 0, z.real, z.imag, scale=0.1) plt.show() plotapolar(a) # 2b) b = 1j print(cmath.polar(b)) plotapolar(b) (1.0, 1.5707963267948966) # 2c) c = 4 + 1j print(cmath.polar(c)) plotapolar(c) (4.123105625617661, 0.24497866312686414) #2d) d = 5 - 2j print(cmath.polar(d)) plotapolar(d) (5.385164807134504, -0.3805063771123649) 2.1 Multiplicação e divisão de números polares Sendo:\n$z_1 = r_1(\\cos\\theta_1 + i\\sin \\theta_1)$\n$z_2 = r_2(\\cos\\theta_2 + i\\sin \\theta_2)$\nMultiplicação para a forma polar:\n$z_1z_2= r_1r_2[\\cos(\\theta_1+\\theta_2) + i \\sin((\\theta_1+\\theta_2)]$\nDivisão para a forma polar\n$\\frac{z_1}{z_2}= \\frac{r_1}{r_2}[\\cos(\\theta_1-\\theta_2) + i \\sin((\\theta_1-\\theta_2)]$\nLembrando que:\n$arg(z_1z_2) = arg z_1 + arg z_2$ e\n$arg(\\frac{z_1}{z_2}) = arg z_1 -arg z_2$\nCalcule a multiplicação e divisão …","date":1691712000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1694286000,"objectID":"5c1f24ef5834469f40dcd1da90f6cad9","permalink":"https://lgrando1.github.io/post/complexex1/","publishdate":"2023-08-11T00:00:00Z","relpermalink":"/post/complexex1/","section":"post","summary":"Exercícios operações básicas números complexos","tags":["Matemática","números","complexos","aprendizagem"],"title":"Números Complexos - Pt.2","type":"post"},{"authors":[],"categories":[],"content":"Pt 1 - Introdução Nesta série de postagens, trataremos dos números complexos.\nUtilizaremos o Python como linguagem de programação.\nA Parte 1 deste série considera as operações com as coordenadas cartesianas;\nNúmeros complexos\n1.1 - O módulo de um número complexo\n1.2 - O Conjugado de um Número Complexo\nOperações Básicas\n2.1 - Adição\n2.2 - Subtração\n2.3 - Multiplicação de números complexos\n2.4 - Divisão de números Complexos\nCódigo disponível aqui: https://github.com/lgrando1/Notas_Numeros_Complexos/\n1. Números complexos Elemento de um sistema numérico que contém os números reais e um elemento especifico denominado $i$, chamado de unidade imaginária, e satisfaz a equação $i^2 = -1$.\nPlano Complexo Números complexos são expressões da forma $z = x + iy$ ou $z = x + jy$, onde:\n$x$ é a parte real de $z$ ou $x = Re$ z; $y$ é a parte imaginária de $z$ ou $y = Im$ z. A representação cartesiana de um número complexo $z = 2 + j1$:\nO conjunto de números complexos é chamado de plano complexo cujo simbolo é $\\mathbb{C}$ e pode ser identificada como $\\mathbb{R}^2$.\nOs números reais são um conjunto do plano complexo onde a parte imaginaria é zero.\nConforme a biblioteca utilizada no Python, pode-se representar o elemento $i$ como a letra $j$, no caso da biblioteca cmath para representar a parte imaginaria de um número complexo Já a biblioteca Sympy utilizasse a Letra $I$.\nEntão a o numero $z = 2+3i$ pode ser descrito no Python como:\n#Definindo o número: z = 2 + 3j print(\u0026#34;Representação do número\u0026#34;) print(z) Representação do número (2+3j) print(\u0026#34;Classe de z\u0026#34;) print(type(z)) Classe de z \u0026lt;class \u0026#39;complex\u0026#39;\u0026gt; Um numero complexo pode ser representado por um ponto no plano complexo $\\mathbb{C}$ e o numero $z = 2+3j$ pode ser representado no Python:\nprint(complex(2,3)) (2+3j) print(\u0026#34;Parte real de z\u0026#34;) print(z.real) Parte real de z 2.0 print(\u0026#34;Parte complexa de z\u0026#34;) print(z.imag) Parte complexa de z 3.0 1.1 - O módulo de um número complexo O módulo de um número complexo $z = x + iy$ é a distância entre o ponto $z$ e a origem, utilizando o Teorema de Pitágoras:\n$|z| = \\sqrt{x^2 + y^2}$\nEm Python, pode obter este valor pela função abs(z):\nz = 1+4i\nw = 4+2i\nz = 1+4j w = 4+2j print(f\u0026#34;O módulo de z é: {abs(z)}\u0026#34;) O módulo de z é: 4.123105625617661 print(f\u0026#34;O módulo de w é: {abs(w)}\u0026#34;) O módulo de w é: 4.47213595499958 1.2 - O Conjugado de um Número Complexo O conjugado do número complexo $z = x + iy$ é $\\overline{z} = x - iy$\nPropriedades do conjugado:\n$\\overline{\\overline{z}} = z$\n$\\overline{z+w} = \\bar{z}+\\bar{w}$\n$\\overline{z} = |\\overline{z}|$\n$z\\overline{z} = (x+iy)(x-iy) = x^2+y^2 = |z|²$\n$\\frac{1}{z} = \\frac{\\overline{z}}{z\\overline{z}}= \\frac{\\bar{z}}{|z|²}$\n$|z \\cdot w| = |z|\\cdot|w|$\n$\\overline{(\\frac{z}{w})} = \\frac{\\overline{z}}{\\overline{w}}$, quando $w \\neq 0$\n$|z| = 0$ se e somente se $z = 0$\nPara encontrar os valores Reais e imaginários de z,\npodemos fazer $z = \\overline{z}$ ou $z = -\\overline{z}$, resultando em:\n$Re$ z $= \\frac{z + \\overline{z}}{2}$\n$Im$ z $= \\frac{z - \\overline{z}}{2i}$\nPara obter o conjugado de um número complexo $z$ em Python:\nz = 3+2j print(z.conjugate()) (3-2j) Algumas desigualdades:\n$-|z|\\leq Re$ z $ \\leq |z|$\n$-|z|\\leq Im$ z $ \\leq |z|$\nDesigualdade triangular $|z+w| \\leq |z| + |w|$\nGeneralizando:\n$|z_1+z_2 + … z_n| \\leq |z_1| + |z_2|+ … + |z_n|$\nDesigualdade triangular inversa $|z-w| \\geq |z| - |w|$\n2. Operações Básicas 2.1 - Adição Se $z = x + iy$ e $w = u + iv$, podemos representar z + w como:\n$(x + iy) + (u + iv) = (x+u) + i(y+v)$, onde:\nRe$(z+w)$ = Re $z$ + Re $w$ Im$(z+w)$ = Im $z$ + Im $w$ 2.2 - Subtração Se $z = x + iy$ e $w = u + iv$, podemos representar z - w como:\n$(x + iy) - (u + iv) = (x-u) + i(y-v)$, onde:\nRe $(z-w)$ = Re $z$ - Re $w$ Im $(z-w)$ = Im $z$ - Im $w$ Em Python para z = 1+4i e w = 4+2i\nz = 1+4j w = 4+2j print(f\u0026#34;O valor de z+w é, {z+w}\u0026#34;) print(f\u0026#34;O valor de z-w é, {z-w}\u0026#34;) O valor de z+w é, (5+6j) O valor de z-w é, (-3+2j) 2.3 - Multiplicação de números complexos $(x+iy) \\cdot (u-iv) = (xu-yv)+i(xv+yu) \\in \\mathbb{C}$\nPropriedades:\nAssociativas: $(z_1z_2)z_3 = z_1(z_2z_3)$; Comutativas: $z_1z_2 = z_2z_1$; Distributivas: $z_1(z_2+z_3) = z_1z_2+ z_1z_3)$. Exemplo\na = 2+4j\nb = -7+5j\n$(2+4j) \\cdot (-7+5j) = (2 \\cdot -7 - 5 \\cdot 4) + j(2 \\cdot 5 + 4 \\cdot -7)$\n$= -34-18j$\nEfetuando a multiplicação dos números a, b e c:\na = 2+4j b = -7+5j c = 3+2j print(\u0026#34;a * b = \u0026#34;, a * b) print(\u0026#34;a * c = \u0026#34;, a * c) a * b = (-34-18j) a * c = (-2+16j) Verificando se as propriedades são verdadeiras\n#Propriedades print(\u0026#34;Associativa: (a*b)*c == a*(b*c)\u0026#34;) print((a*b)*c == a*(b*c)) Associativa: (a*b)*c == a*(b*c) True print(\u0026#34;Comutativa: a*b == b*a\u0026#34;) print(a*b == b*a) Comutativa: a*b == b*a True print(\u0026#34;Distributiva: a*(b+c) == a*b + a*c\u0026#34;) print(a*(b+c) == a*b + a*c) Distributiva: a*(b+c) == a*b + a*c True As Potências de $i$:\n$i^0 = 1$\n$i = 0 + 1i$\n$i^2 = (0 + 1i)(0 + 1i) = (0\\cdot0 - 1\\cdot1) + i(0\\cdot1+1\\cdot0) = -1$\n$i^3 = i^2 \\cdot i = -1\\cdot i = -i $\n$i^4 = i^2 \\cdot i^2 = -1\\cdot -1 = 1 $\n$i^5 = i^4 \\cdot i = …","date":1691366400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1694286000,"objectID":"718d6e0a2b0a6ba6585412b1ca109191","permalink":"https://lgrando1.github.io/post/complex1/","publishdate":"2023-08-07T00:00:00Z","relpermalink":"/post/complex1/","section":"post","summary":"O que são números e algumas operações básicas","tags":["Matemática","números","complexos","aprendizagem"],"title":"Números Complexos - Pt. 1","type":"post"},{"authors":[],"categories":[],"content":"A tecnologia e seus avanços são maravilhosos, eu mesmo sou uma pessoa enviesada nesta questão, pois amo a tecnologia, mas isto não tem valor, se não pensarmos em seus efeitos futuros1.\nMeu pedido à todos é:\nNão apenas comemorar os avanços da tecnologia, sem antes pensarmos em como mitigar seus possíveis efeitos negativos na vida das pessoas.\nAcredito que devemos ser conscientes e críticos com os avanços, com o intuito de garantir que todos tenham sua humanidade preservada. Se o efeito for positivo, vamos todos comemorar, agora se o efeito for negativo, vamos pensar melhor.\nAlguns exemplos:\nUma nova I.A possui a capacidade de elaborar relatórios ou realizar atendimentos de forma automatizada -\u0026gt; Como treinar as pessoas que efetuavam este trabalho para novas atividades. Um sistema de veículos autônomo irá substituir os motoristas -\u0026gt; Como treinar as pessoas que efetuavam este trabalho para novas atividades. Você está se aprimorando para entender esta nova tecnologia funciona/trabalha?, você esta atuando como um “motor de inovação” para sua comunidade?, você está mostrando como utilizar está nova tecnologia e suas armadilhas?. etc, etc. Temos que fazer nossa parte, para que todos sejam respeitados no futuro.\nhttps://notbyai.fyi/ Lembrando:É um trabalho em andamento, ideias são sempre bem vindas.\n1 ONLINE, É. N. “Uma nova classe de pessoas deve surgir até 2050: a dos inúteis”. Disponível em: https://epocanegocios.globo.com/Vida/noticia/2018/01/uma-nova-classe-de-pessoas-deve-surgir-ate-2050-dos-inuteis.html.\n‌\nPara comentários e sugestões, clique aqui\nControle de versão: v00 [19/03] - Versão inícial em PT-BR\nTODO: Traduzir para inglês. Pensar mais exemplos\n","date":1679184000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1679238560,"objectID":"f35ed3c73b3b8870e1fd465571ef3d42","permalink":"https://lgrando1.github.io/post/pedido/","publishdate":"2023-03-19T00:00:00Z","relpermalink":"/post/pedido/","section":"post","summary":"Como aproveitar a tecnologia de modo consciente","tags":["tecnology","future of work","AI"],"title":"Apenas um pedido","type":"post"},{"authors":[],"categories":[],"content":"Sugestões (empíricas) para usufruir o melhor da Internet.\ni. Não ofenda o próximo. -\u0026gt; Somos todos irmãos. ii. Sempre utilize sua cognição e lógica -\u0026gt; não acredite em tudo. iii. Faça back-up do que é importante -\u0026gt; Evite ser surpreendido. iv. Nunca utilize a mesma senha em dois lugares distintos -\u0026gt; Evite ser surpreendido (x2). v. Sempre utilize todos os métodos de segurança disponíveis -\u0026gt; Evite ser surpreendido (x3). vi. Gaste pouco (ou não gaste) tempo nas redes sociais -\u0026gt; Leia um livro, converse com seus amigos/família. vii. Cuide de seu dinheiro e de seus dados -\u0026gt; Os seus dados (e seu conhecimento) são seus maiores patrimônios. viii. Sempre prefira o open source -\u0026gt; Tudo que é aberto/auditável acaba sendo mais confiável. ix. Sempre leia os Termos dos serviços (TOS) -\u0026gt; Evite ser surpreendido (x4). x. Você nunca está totalmente seguro -\u0026gt; Sempre se aprimore. Os seus dados (e seu conhecimento) são seus maiores patrimônios (x2). https://notbyai.fyi/ Lembrando:É um trabalho em andamento, idéias são sempre bem vindas.\nPara sugestões\nControle de versão: v00 [18/03/23] - Versão inícial em PT-BR\nTODO: Traduzir para inglês.\n","date":1679097600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1679152160,"objectID":"afd02caf03216c6b1ead225b207b8115","permalink":"https://lgrando1.github.io/post/rules/","publishdate":"2023-03-18T00:00:00Z","relpermalink":"/post/rules/","section":"post","summary":"Algumas lições que aprendi utilizando a tecnologia","tags":["rules","security","data","WIP"],"title":"10 \"Mandamentos\" para os tempos modernos","type":"post"},{"authors":[],"categories":[],"content":"Language post available: PT-BR\nEN\nFollow below a resource list that I use to learn. This post is an organic list.\nFirst, a great thanks to all resources responsible cited in this. Any resource suggestions or corrections, let me know. I wish great learning to you. Total links: 27 1 - Get informed: Links to inform you.\nHacker News 👉 Social news website when users discuss computing and entrepreneurship. The best news is voted Slashdot 👉 News source of technology Awesome Lists 👉 Lists of awesome and interesting topics Telegram Data Science, Programação e Simulação Channel 👉 Telegram channel with Machine Learning, Artificial Intelligence and Simulation news 2 - General Programming Learning: Links about general programming.\nFreeCodeCamp 👉 Several programming courses and certifications. Youtube channel also OsProgramadores 👉 Brazilian Group for new programming learners with challenges and Telegram chat Computacional 👉 Computational Thinking Brazilian portal CT-STEM 👉 Northwestern University Computational STEM tools using Netlogo MIT Scratch 👉 Block type programming language. Great for starters. Possible to create stories, games, and animations. Several tutorials MIT App Inventor 👉 Block type programming language. Several tutorials. Create iPhone and Android apps in the browser and test them on your phone Roadmaps.sh 👉 List of guides to support developers learning Universidade-Livre/Ciencia-da-computacao/ 👉 Brazilian guide to computational science self-learning Save Money: Learn to Code From Home 👉 A blog reader suggestion with a lot of good resources to learn to code STEM Identity Resources for Women and Girls 👉 College Educated STEM resources list for Women and Girls 3 - Machine Learning / Artificial intelligence: Links about Artificial intelligence.\nMachine Learning for Everyone 👉 Great machine learning concepts summary Machine learning for humans 👉 Great machine learning concepts in plain English Kaggle 👉 Machine learning and Data Science portal. With competition, and Courses Data Hackers 👉 Brazilian data science community, with a Slack community R-Bloggers 👉 Blog that brings news and tutorials about R language Kdnuggets 👉 Data Science portal with great information quantity Data Science for Beginners 👉 Microsoft’s Data Science guide for beginners 4 - Books lists: Links about programming books list.\nBig book of R 👉 List of R language books Online Programming Books 👉 Books list several computing areas Green Tea Press 👉 Allen Downey books. Recommended 5 - Data Viz Resources: Links about Data visualization tools.\nData Viz Project 👉 List of Graphs and their characteristics R Graph Gallery 👉 List of charts implemented in R Python Graph Gallery 👉 List of charts implemented in Python https://notbyai.fyi/ ","date":1666483200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1719880748,"objectID":"973a855da5d5b1dd53ba76fa4d475a6e","permalink":"https://lgrando1.github.io/post/learning-resource-links/","publishdate":"2022-10-23T00:00:00Z","relpermalink":"/post/learning-resource-links/","section":"post","summary":"This post is curate some good resources helping new and experienced learners","tags":["Learning","AI","ML","Netlogo"],"title":"Learning Resource Links","type":"post"},{"authors":[],"categories":[],"content":"Post disponível em: PT-BR\nEN\nSegue abaixo uma lista de links que eu utilizo para aprender. Este post é uma lista orgânica\nPrimeiramente, um muito obrigado aos responsáveis pelos sites presentes nesta lista. Em caso de Sugestões de novos recursos ou correções, por favor me informe. Eu desejo grande aprendizado para você. Total de links: 27 1 - Fique informado: Links para te manter informado.\nHacker News 👉 Site em que usuários trazem notícias diversas sobre computação e empreendedorismo. As melhores notícias recebem votos. Slashdot 👉 Fonte de notícias sobre tecnologia Awesome Lists 👉 Conjunto de listas sobre tópicos interessantes Canal do Telegram Data Science, Programação e Simulação 👉 Canal do Telegram com novidades sobre Machine Learning, Inteligência Artificial e Simulação 2 - Aprendizado geral de computação e/ou programação: Links sobre aprendizado em programação em geral.\nFreeCodeCamp 👉 Vários cursos e certificação gratuitas sobre programação. Possui canal no Youtube. OsProgramadores 👉 Grupo Brasileiro voltado para novos programadores, com desafios e suporte via chat do Telegram Computacional 👉 Portal brasileiro sobre Pensamento Computacional e recursos educacionais CT-STEM 👉 Ferramentas computacionais STEM da Universidade de Northwesternutilizando Netlogo MIT Scratch 👉 Linguagem de programação em blocos. Ótima para iniciantes. Possibilidade de criar histórias, jogos e animações. Vários tutoriais. MIT App Inventor 👉 Linguagem de programação em blocos. Vários tutoriais. Crie aplicativos IPhone and Android no seu navegador e teste em seu celular Roadmaps.sh 👉 Lista de guias para suportar o aprendizado de desenvolvedores Universidade-Livre/Ciencia-da-computacao 👉 Guia brasileiro para aprendizado autodidata em ciência da computação Save Money: Learn to Code From Home 👉 Uma sugestão de uma leitora do blog com bons recursos para aprender a programar. STEM Identity Resources for Women and Girls 👉 Recursos do site College Educated para STEM voltado para mulheres. 3 - Aprendizado de máquina / Inteligência artificial: Links sobre Inteligencia Artificial.\nMachine Learning for Everyone 👉 Ótimo resumo para conceitos de aprendizado de máquina. Possui tradução para o português Machine learning for humans 👉 Ótimo resumo para conceitos de aprendizado de máquina em inglês simples Kaggle 👉 Portal com cursos e competição de aprendizado de máquina e ciência de dados Data Hackers 👉 Grupo brasileiro de ciência de dados com uma comunidade no Slack. R-Bloggers 👉 Blog que traz notícias e tutoriais sobre a linguagem R Kdnuggets 👉 Portal de ciência de dados com grande quantidade de informação Data Science for Beginners 👉 Guia da Microsoft para iniciantes em ciência de dados 4 - lista de Livros: Links sobre lista de livros sobre programação.\nBig book of R 👉 Lista com livros que envolvem a linguagem R Online Programming Books 👉 Lista de livros de variados temas da computação Green Tea Press 👉 Livros do autor Allen Downey - Muito recomendado 6 - Recursos para visualização de dados: Links sobre ferramentas para Visualização de dados.\nData Viz Project 👉 Lista de grafícos e suas caracterisiticas R Graph Gallery 👉 Lista de gráficos implementados em R Python Graph Gallery 👉 Lista de gráficos implementados em Python https://notbyai.fyi/ ","date":1666483200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1719880748,"objectID":"9026b7312eb26385a2e4a823dc2c371a","permalink":"https://lgrando1.github.io/post/links-interessantes-aprendizagem/","publishdate":"2022-10-23T00:00:00Z","relpermalink":"/post/links-interessantes-aprendizagem/","section":"post","summary":"Esta publicação contém bons recursos para ajudar aprendizes novos e experientes","tags":["AI","ML","Netlogo","aprendizagem"],"title":"Recursos para aprendizagem","type":"post"},{"authors":[],"categories":null,"content":"","date":1633691100,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1633691100,"objectID":"3a1bd26709cd3c369113342d1d9ccdba","permalink":"https://lgrando1.github.io/talk/panel-discussion-uvm/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/talk/panel-discussion-uvm/","section":"event","summary":"In this panel discussion, I present the work \"Using a classical model to provide insights through Agent-Based Simulation.\" and discussed with other panelists about the current/future state of agent-based simulation.","tags":["Agent-Based","Simulation","presentation"],"title":"Panel Discussion UVM","type":"event"},{"authors":[],"categories":null,"content":"","date":1604494800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1604494800,"objectID":"cf75d18153edf6e0062f6ce000f0e0a4","permalink":"https://lgrando1.github.io/talk/ieemcon-2020/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/talk/ieemcon-2020/","section":"event","summary":"Present the proceeding work \"Drones Swarm Recharging - Modeling using Agent-Based Simulation\" during the 11th IEMCOM. Our paper recieve the Certificate of Best Paper in the Internet of Things category","tags":["Agent-Based","Simulation","presentation"],"title":"IEEMCON 2020","type":"event"},{"authors":["Leonardo Grando","Edson L. Ursini","Paulo S. Martins"],"categories":null,"content":"","date":1604448000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1604448000,"objectID":"2fe1dfe58d524a410b0f8fb6cfc5a789","permalink":"https://lgrando1.github.io/publication/grando-2020/","publishdate":"2020-11-04T00:00:00Z","relpermalink":"/publication/grando-2020/","section":"publication","summary":"This work seeks to address one of the most critical problems of Flying Ad Hoc Networks (FANET), which is the issue of recharging batteries coordination. For recharges to be carried out in the best possible way, the number of load devices (Base Stations) should not be excessively high so as not to burden the network. On the other hand, it is also necessary that when the drones want to recharge, there must always be a source of energy available. For this, we propose internal estimators that provide intelligence to the drones to try to predict the next charger attendance rate. The drones will not have communication with each other to recharge coordination but will continue to communicate concerning other routine activities (note that this communication is not considered in the scope of this model), that is, for recharging the batteries’ coordination, there will be no energy expenditure on communication. The verification of the suitability of the proposal is done through Agent-Based Simulation and the use of three different policies for decision making. This will enable an approach that aims to optimize the operation of the system through a Nash equilibrium.","tags":["Drones","Simulation","Agent-Based","Nash Equilibrium"],"title":"Drones Swarm Recharging: Modeling Using Agent-Based Simulation","type":"publication"},{"authors":["Leonardo Grando"],"categories":null,"content":"","date":1597968000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1597968000,"objectID":"d21765dc3a0890666f87716d16c09db3","permalink":"https://lgrando1.github.io/publication/grando2020a/","publishdate":"2020-08-21T00:00:00Z","relpermalink":"/publication/grando2020a/","section":"publication","summary":"This work seeks to solve one of the most critical problems of the Flying AdHoc (FANET) networks, which is the issue of coordinating the recharging of drones that fly in the form of Swarms. For recharging to be done in the best possible way, it is desirable that the number of charging devices (base stations) did not be excessively high due to the high implementation cost. Conversely, it is also necessary that, when drones want to recharge, they must have a source of energy available. In other words, we search for a balance between the economically viable number of charging stations and the adequate energy supply for the drones when necessary. For this, we propose agents (drones) equipped with internal intelligence, that is, with internal predictors that provide intelligence to attempt to predict the next attendance rate in the charging device and thus be able to decide whether go or not go to the recharging. Ideally, the forecast should be as best as possible. Therefore, the drone should go when it predicts it should go and it shouldn't go when it predicts not to go. The Nash equilibrium usage for this problem is made possible by the modeling via the El Farol Bar Problem (EFBP), which allows the development of this analogy without the collusion of agents in coordinating the simulation of the recharge of this set of drones. In other words, there will be no energy expenditure on communication about the drones' battery recharging coordination, although the communication will continue in the other tasks inherent to the swarm of drones. The verification of the suitability of the proposal is done through Agent-Based Simulation and are used three different policies for the best predictor decision by each drone. This will allow us to verify the performance in the operation of the system through a Nash Equilibrium. In the current state of this analogy is considered that if the drones go to the charging station and it is full, there will be no possible charging because the system is overloaded. This study includes microscopic and macroscopic analysis. Microscopic analysis is the evaluation of the performance of the rewards of each predictor concerning a set of simulation parameters, aiming at a microscopic behavior performance improvement. A macroscopic analysis is the evaluation of the performance of the global service of the system with three types of policies. This latter analysis is used as a basis for evaluating the drone's recharge analogy. In this way, the performance of the best simulation sets for the recharge of drones is evaluated, which allows supplying below the control threshold (attendance below than the number of recharge positions), but which are relatively close to the threshold.","tags":["Drones","Simulation","Agent-Based","Nash Equilibrium"],"title":"Procedimento de recarga de baterias de drones utilizando simulação por agentes e equilíbrio de Nash","type":"publication"},{"authors":["Leonardo Grando"],"categories":null,"content":"","date":1259884800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1259884800,"objectID":"fcc49c55dbec452b09198fd2b2661ae4","permalink":"https://lgrando1.github.io/publication/grando-2009/","publishdate":"2009-12-04T00:00:00Z","relpermalink":"/publication/grando-2009/","section":"publication","summary":"The use of computational tools for the simulation of physical phenomena is increasing, saving time and money in new processes and materials development. This study aims to use the Java tool for developing a program to compute the kinetics of sintering of vitreous material for ceramics manufacturing. Through this process, special glasses are grinded, compacted and sintered, with simultaneous or subsequent particles crystallization. A recent solution for the sintering process of glass by viscous flow, called Cluster Model, considers the effect of surface crystallization of the particles, which limits the densification (pore elimination) of the material, and allows to deal with mixtures of particles of different sizes. We developed a program in JAVA based on the Clusters Model, for calculations of the sintering kinetics of compact particles of glass powder with different particle sizes and concurrent crystallization. Published data for glasses in the systems Al2O3-B2O3-SiO2 and CaO-MgO-SiO2 were used to check the results of the program, expressed as graphs, which repeated with great precision the literature values.","tags":["Glass","Simulation","JAVA","Crystallization"],"title":"Desenvolvimento de um Programa em Java para Cálculo da Cinética de Sinterização de Vidros.","type":"publication"}] \ No newline at end of file + [{"authors":null,"categories":null,"content":"Leonardo Grando is a Brazilian Assistant Professor at UNASP and a Technology Ph.D. candidate at University of Campinas (UNICAMP). Specializing in complex systems, agent-based simulations (ABMS), artificial intelligence (AI), and the Internet of Things (IoT), I focus on developing cutting-edge machine learning models and programming solutions.\nWith expertise in leading technologies like NetLogo, Python, R, LaTeX,Cyber security, Web Development, Data Bases, and Linux, my current Ph.D. research is centered on IoT device swarms (UAVs) for perpetual flight, leveraging agent-based modeling for efficiency. This involves using NetLogo for simulation and Python and R for advanced data mining.\nPreviously, I transitioned from a career in the automotive industry, where I focused on productivity improvements, into the academic field. Since 2019, I have contributed to data science, teaching, and research, including experience as a teacher at the fundamental high school to undergraduate level.\nFollow me in Mastodon and my Telegram Channel\nDownload my Resume .\nBaixe meu Currículo .\n","date":1702339200,"expirydate":-62135596800,"kind":"term","lang":"en","lastmod":1702339200,"objectID":"2525497d367e79493fd32b198b28f040","permalink":"","publishdate":"0001-01-01T00:00:00Z","relpermalink":"","section":"authors","summary":"Leonardo Grando is a Brazilian Assistant Professor at UNASP and a Technology Ph.D. candidate at University of Campinas (UNICAMP). Specializing in complex systems, agent-based simulations (ABMS), artificial intelligence (AI), and the Internet of Things (IoT), I focus on developing cutting-edge machine learning models and programming solutions.","tags":null,"title":"Leonardo Grando","type":"authors"},{"authors":[],"categories":[],"content":"Lendo artigo da Nature fiquei preocupado em relação a privacidade e o uso de meus dados quando utilizandos os LLMs, como por exemplo o Chat-GPT, Gemini e o CoPilot. Sem contar que estas ferramentas nescessitam de acesso a internet. Alguns sites como o Hugging Face permitem testar alguns usos destas ferramentas ferramentas utilizando uma biblioteca para a linguagem Python, como eu já descrevi em uma postagem anterior.\nMas como utilizar estas ferramentas como se fosse abrir um site e conversar com elas? Eu queria algo mais completo e como sou usuário Linux (uso o Pop_OS! 20.04), encontrei este post muito bem explicado de como rodar uma LLM off-line no Linux e resolvi replicar, e conto a experiência aqui neste post.\nO Ollama é uma ferramenta que facilita o processo de baixar e rodar os modelos LLMs de código aberto. Ele pode ser instalado no Windows, MacOS e o Linux. Apenas seguir o procedimento de instalação presente no site deles.\nNo meu caso utilizei o comando abaixo, mas recomendo que você siga o procedimento descrito pelo site pois o mesmo pode alterar conforme novas atualizações.\nRepetindo: siga o procedimento de instalação conforme descrito no site deles, não este daqui.\ncurl -fsSL https://ollama.com/install.sh | sh O código acima irá baixar o Ollama em sua máquina e rodar o script de instalação. Você pode auditar o script de instalação aqui\nA minha máquina é um notebook Acer Nitro que adquiri no final de 2020. Ele possui um Core i5 9300H, 16 GB de RAM e uma GPU Nvidia Geforce GTX 1650. O que fica interessante, pois o Ollama reconheceu a GPU.\nNa postagem que usei como referência para instalar, o autor descreve que o Notebook dele não possui uma GPU discreta, o que influenciou no desempenho. E o modelo escolhido vai também influenciar.\nHora de testar se o Ollama está rodando, num browser digite:\nAqui mostrou que está funcionando.\nAgora é hora de baixar o modelo LLM. No site existe vários modelos. Já testei o llama3.1. Este modelo desenvolvido pela Meta e que possui três níveis de parâmetros 8, 70 e 405 bilhões de parâmetros. Acabei escolhendo o modelo de 8B. São aproximadamente 4.7 GB utilizado de armazenamento. Mas ai fica o critério de cada um. Para este post vou apresentar o processo de instalação do modelo phi3.5 da Microsoft.\nPara dar um “pull” em um modelo LLM desejado, utiliza-se o comando:\nollama pull \u0026lt;Nome_da_LLM\u0026gt; Então para baixar e instalar o modelo phi3.5 da Microsoft.\nollama pull phi3.5 Agora vamos listar as imagens que estão presentes no seu computador.\nollama list Para rodar uma das LLMs com o código:\nollama run \u0026lt;Nome_da_LLM\u0026gt; No caso da Phi3\nollama run phi3.5 Mas antes de tudo, para fins de demostração, vou garantir que não está ocorrendo comunicação com a internet:\nAqui vou pedir para que ele me gere um código Python para connectar a uma base do MySQL:\nNão vou me extender na utilização dele ou de outro modelo, mas é possível utilizar o próprio terminal para conversar com a LLM, e existem formas de conversar via interface gráfica, o que fica para um próximo post.\nAgora para avaliar o uso computacional da minha máquina, vou utilizando o utilitário Nvidia-smi em que é possivel ver o quanto ele está utilizando os recursos da GPU\nE em relação ao uso computacional da CPU e do consumo de memória RAM ele não ficou “tão pesado”, ,as lembrando que o Phi3.5 é um modelo particularmente pequeno. O print abaixo apresenta o consumo computacional durante uma inferencia:\nAgora para sair do Ollama, basta digitar no prompt:\n/bye E para gerenciar e deletar os modelos LLMs, é possivel listar e solicitar a remoção da imagem. PS: peço desculpas na imagem abaixo por que eu digitei um comando errado, por isto ocultei o mesmo, para evitar confusão.\nollama rm \u0026lt;nome_da_LLM\u0026gt; Este tutorial aborda apenas alguns aspectos do uso do Ollama, o tutorial que serviu como base para este experimento possui mais informações, como utilizar a interface gráfica com Docker e também como desinstalar o Ollama. Assim você tem um assistente local para lhe ajudar em tarefas simples. Ontem eu testei o uso do Llamma 3.1 para criar um banco de dados no MySQL e para implementar um código Python para interagir com este banco de dados e o código proposto funcionou. Mas é preciso testar mais.\nSucesso a todos!\n","date":1726963200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1727017760,"objectID":"ddea2163018f2b9dbff519740e00976c","permalink":"https://lgrando1.github.io/post/ollama/","publishdate":"2024-09-22T00:00:00Z","relpermalink":"/post/ollama/","section":"post","summary":"Como rodar uma Ferramenta LLM Off-line no Linux","tags":["GPT","Ollama","prompt","enginnering","IA","AI","Offline","GPU","terminal"],"title":"Usando uma Ferramenta LLM no Linux de Forma Offline","type":"post"},{"authors":[],"categories":[],"content":"Realizei recentemente o curso Prompt Engineering for ChatGPT e gostaria de compartilhar algumas anotações que realizei durante o mesmo.\nEstas ferramentas não podem ser consideradas como fonte de fatos, mas são excelentes como suporte para ideias e quem sabe para tirar da gaveta aquela ideia de um livro.\nO objetivo desta série é criar postagens com quatro estratégias por post. Estou utilizando como exemplo o Chat-GPT em sua versão grátis, mas você pode testar em qualquer outra ferramenta.\nCaso queira conhecer melhor o funcionamento destas ferramentas, recomendo o texto do Stephen Wolfram e o curso Prompt Engineering for ChatGPT que pode ser auditado gratuitamente no Coursera.\nOs links incluem exemplos de cada item.\n1 - São ferramentas estocásticas, por isto pode não ocorrer repetitividade nas respostas, já que a sua resposta depende de como elas foram treinadas: Conforme você realiza o prompt, as ferramentas podem responder de formas diferentes, por isto é importante o refino da sua questão e testar várias estratégias.\nAinda considerando a pergunta, quantos prêmios Nobéis o Brasil já foi agraciado? O exemplo 1 e o exemplo 2 apresentam respostas distintas para a mesma questão.\n2 - Você pode solicitar a esta ferramenta para que ela aja conforme um personagem (ex: professor, consultor, etc.) e que a resposta seja direcionada para determinado público (jovens da terceira idade, adolescente). A estrutura deste prompt é:\nAja como P e faça A\nOnde P é igual ao personagem que você deseja e A ação que você espera dele.\nNeste exemplo, vou pedir para ele agir como um professor de Línguas, depois vou pedir para ele explicar o meu erro usando um exemplo de obra literária e depois para ele contextualizar um assunto atual para um cidadão do ano 1700.\n3 - Você pode enviar novas informações para o Prompt. Estas ferramentas possuem uma limitação do processo de treinamento. Você pode fornecer novas informações para que ele possa aprimorar a resposta.\nNeste exemplo pedi para ele os presidentes que governaram o Brasil entre os anos 2000 a 2024 e solicitei atualização das informações com o novo presidente.\n4 - Refinamento de questões. Observe que a clareza com que você faz os questionamentos é importante para que você tenha respostas mais próximas do que deseja. Não adianta você pedir: Quais foram os presidentes?, se você quer uma resposta limitada por tempo. Mas você pode pedir para ele como melhorar sua pergunta.\nPor enquanto são estas dicas, vimos que podem ocorrer variações nas respostas, que estas ferramentas podem agir como determinado personagem para atingir um público específico, que você pode treinar a ferramenta localmente com novas informações para que sua resposta seja mais atual e que a própria ferramenta pode lhe ajudar a refinar as suas questões.\n","date":1714176000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1714230560,"objectID":"cc0fdc17dc780828aaabd445e7dbdc1c","permalink":"https://lgrando1.github.io/post/prompt1/","publishdate":"2024-04-27T00:00:00Z","relpermalink":"/post/prompt1/","section":"post","summary":"Alguns padrões para facilitar a utilização do Chat-GPT","tags":["GPT","Chat-GPT","prompt","enginnering","IA","AI"],"title":"Como usar melhor o Chat-GPT e outras ferramentas generativas-Parte 1","type":"post"},{"authors":[],"categories":[],"content":"A plataforma Hugging Face é uma portal onde a comunidade de aprendizado de máquina colabora com modelos, conjunto de dados e aplicações.\nAo acessar o site e clicar no link Models é possível buscar por variados modelos voltados para várias tarefas de aprendizado de máquina visão computacional, processamento natural de linguagem, áudio, dados tabulares, aprendizado por reforço e outros tipos.\nNeste post apresentaremos uma introdução de como utilizar estas bibliotecas em sua máquina (ou no Google Colab). Como exemplo é demostrado a realização de duas tarefas: o preenchimento de mascaras de texto (completar um espaço de um texto) e o resumo de um texto.\nSão dois modelos/exemplos simples, mas o objetivo é realmente despertar a curiosidade em conhecer mais sobre esta plataforma.\nAlgumas considerações:\nAo baixar o modelo em sua maquina, alguns modelos são grandes, como o segundo modelo deste tutorial que possui mais do que 1,5 GB. Neste link é possível ver como gerenciar o cache destes modelos; Se atente ao modelo que você vai testar, pois já foram encontrados problemas de segurança; Se atente também nas licenças de conteúdo dos modelos e também possíveis dependências. Se atente a documentação presente em cada página dos modelos; Alguns modelos de aprendizados de máquinas exigem bastante recursos computacionais, ao escrever este post, várias vezes o Jupyter acabou resetando. Apenas para comparativo, este computador é um Core i5 de nona geração (Intel i5 - 9300H) e 8 GB de RAM. Infelizmente ainda não consegui ativar a GPU para tarefas de Machine Learning no Linux. No Google Colab é possível ativar o suporte ao GPU mesmo no tier grátis. Alertas feitos, vamos aos modelos:\nPrimeiro é necessário a biblioteca Transformers para poder baixar e treinais os modelos pré treinados.\nNo momento da escrita deste post estão disponíveis 564772 modelos.\nAqui esta presente a documentação de como instalar esta biblioteca.\nimport transformers from transformers import pipeline #Apenas para suprimir erros, não nescessário. import logging logging.getLogger(\u0026#34;transformers\u0026#34;).setLevel(logging.ERROR) Tarefa 1 - preenchimento de mascaras Para realizar a tarefa de preenchimento de mascaras, utilizaremos o modelo BERTimbau Base (aka “bert-base-portuguese-cased” [1]\nIremos utilizar neste caso a versão base.\nA tarefa realizada será “fill-mask” e iremos pedir que ele devolva 5 respostas para a frase “Batatinha quando nasce, esparrama pelo [MASK]” onde [MASK] é o texto que será preenchido pelo token.\n[1] SOUZA, Fábio e NOGUEIRA, Rodrigo e LOTUFO, Roberto. BERTimbau: pretrained BERT models for Brazilian Portuguese. 2020, [S.l: s.n.], 2020.\nA primeira linha do código abaixo indicar a tarefa a ser executada e o modelo a ser utilizado e a segunda linha aplica o modelo para o texto escolhido.\nmascarar = pipeline(\u0026#34;fill-mask\u0026#34;, model=\u0026#34;neuralmind/bert-base-portuguese-cased\u0026#34;) texto = mascarar(\u0026#34;Batatinha quando nasce, esparrama pelo [MASK]\u0026#34;) for x in range(len(texto)): print(texto[x]) {\u0026#39;score\u0026#39;: 0.3925571143627167, \u0026#39;token\u0026#39;: 8105, \u0026#39;token_str\u0026#39;: \u0026#39;chão\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo chão\u0026#39;} {\u0026#39;score\u0026#39;: 0.10256581008434296, \u0026#39;token\u0026#39;: 1831, \u0026#39;token_str\u0026#39;: \u0026#39;corpo\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo corpo\u0026#39;} {\u0026#39;score\u0026#39;: 0.05736977979540825, \u0026#39;token\u0026#39;: 1147, \u0026#39;token_str\u0026#39;: \u0026#39;mundo\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo mundo\u0026#39;} {\u0026#39;score\u0026#39;: 0.047487251460552216, \u0026#39;token\u0026#39;: 388, \u0026#39;token_str\u0026#39;: \u0026#39;ar\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo ar\u0026#39;} {\u0026#39;score\u0026#39;: 0.023149045184254646, \u0026#39;token\u0026#39;: 9169, \u0026#39;token_str\u0026#39;: \u0026#39;rosto\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo rosto\u0026#39;} Observe nas resposta acima que o maior “score” foi para a frase que contém o token “chão”.\nTarefa 2 - Resumo de textos Para realizar o processo de resumo de texto (“summarization”), iremos utilizar como exemplo o modelo facebook/bart-large-cnn [2]\nUtilizaremos o texto que está presente na própria página do modelo.\n[2] LEWIS, Mike e colab. BART: Denoising sequence-to-sequence pre-training for natural language generation, translation, and comprehension. CoRR, v. abs/1910.13461, 2019. Disponível em: http://arxiv.org/abs/1910.13461.\nresumir = pipeline(\u0026#34;summarization\u0026#34;, model=\u0026#34;facebook/bart-large-cnn\u0026#34;) texto = \u0026#34;\u0026#34;\u0026#34;The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building, and the tallest structure in Paris. Its base is square, measuring 125 metres (410 ft) on each side. During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest man-made structure in the world, a title it held for 41 years until the Chrysler Building in New York City was finished in 1930. It was the first structure to reach a height of 300 metres. Due to the addition of a broadcasting aerial at the top of the tower in 1957, it is now taller than the Chrysler Building by 5.2 metres (17 ft). Excluding transmitters, the Eiffel Tower is the second tallest free-standing structure in France after the Millau Viaduct.\u0026#34;\u0026#34;\u0026#34; resumo = …","date":1711238400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1711306800,"objectID":"e6f974f25e8c4413859549a7cda3679a","permalink":"https://lgrando1.github.io/post/hface/","publishdate":"2024-03-24T00:00:00Z","relpermalink":"/post/hface/","section":"post","summary":"Criando um pipeline para testar os modelos presentes no Hugging Faces","tags":["Hugging Face","IA","ML","Generativos","Python"],"title":"Utilizando a plataforma Hugging Face para testar modelos de aprendizado de máquina.","type":"post"},{"authors":[],"categories":[],"content":"Neste post é apresentado uma rotina de aprendizado de máquina supervisionado utilizando a biblioteca TensorFlow para realizar o reconhecimento e classificação de imagens da base de dados MNIST. Esta base de dados consiste em imagens de numeros escritos a mão e seus respectivos rótulos. A idéia deste post é treinar um modelo de rede neural que reconheça os padrões destas imagens e as classifiquem com o respectivo número.\nO conteúdo desta atividade de classificação é composto de:\nImportar as bibliotecas; Importar o conjunto de dados e dividi-los entre base treino e de teste; Aplicar o processo de Hot Encoding nas classes de respostas; Pré-processamento dos dados para que possam ser uitilizados no treinamento da rede; Criação do modelo de rede neural; Treinamento do modelo com os dados de treinamento; Realizar a predição e comparação com os dados de teste. 1. Importação das bibliotecas necessárias, incluindo o TensorFlow import tensorflow as tf import numpy as np tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR) print(\u0026#39;Using TensorFlow version\u0026#39;, tf.__version__) #Processo de hot-encoding from tensorflow.keras.utils import to_categorical #para criar as camadas do modelo de rede neural from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense #para visualizar as imagens from matplotlib import pyplot as plt %matplotlib inline 2024-03-24 10:02:13.310353: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used. 2024-03-24 10:02:13.370354: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used. 2024-03-24 10:02:13.371713: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations. To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags. 2024-03-24 10:02:14.341836: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT Using TensorFlow version 2.13.1 2: Importar a base de dados e dividi-la em bases treino e de teste A própria biblioteca Tensorflow já disponibiliza esta base.\nfrom tensorflow.keras.datasets import mnist (x_train, y_train),(x_test, y_test) = mnist.load_data() Dimensões dos arrays importados A base de dados MNIST é composta por 70000 imagens em escala de cinza de dimensões de 28 por 28 e seus respectivos rótulos. Neste trabalho esta base foi dividida com 60000 instancias de treino e 10000 de teste para poder verificar a performance do treinamento. Cada valor dos pixels representam um valor integral (entre 0 a 255) na escala de cinza.\nprint(\u0026#34;x_train shape\u0026#34;, x_train.shape) print(\u0026#34;y_train shape\u0026#34;, y_train.shape) print(\u0026#34;x_test shape\u0026#34;, x_test.shape) print(\u0026#34;y_test shape\u0026#34;, y_test.shape) x_train shape (60000, 28, 28) y_train shape (60000,) x_test shape (10000, 28, 28) y_test shape (10000,) Visualizando uma imagem presente na base de treino # Apresentando uma imagem da base de treino. plt.imshow(x_train[1], cmap=\u0026#34;binary\u0026#34;) plt.show() Para ver o seu rótulo de treino: # O valor da classe na posição 1 print(y_train[0]) #valor 5 print(y_train[1]) #valor 0 5 0 Para ver todos os rótulos presentes na base de treino: # Os valores presentes na classe de treino print(set(y_train)) {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 3 - Processo de hot encoding nas classes. Para que as classes de respostas possam passar pelo processo de treinamento e de testes, é necessario aplicar o processo de pré-processamento de hot encoding (criação de variaveis dummies) nas classes de respostas.\nCodificando os rótulos y_train_encoded = to_categorical(y_train) y_test_encoded = to_categorical(y_test) Conhecendo as dimensões das bases de dados codificadas print(\u0026#34;y_train_encoded shape\u0026#34;, y_train_encoded.shape) print(\u0026#34;y_test_encoded shape\u0026#34;, y_test_encoded.shape) y_train_encoded shape (60000, 10) y_test_encoded shape (10000, 10) Visualizando um rótulo codificado. print(y_train_encoded[0]) #valor 5 print(y_train_encoded[1]) #valor 0 [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.] [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.] 4 Pré-processamento. Transformar a matriz de 2 dimensões (28x28 pixels com valores de 0 a 255) em um uníco vetor de dimensão 784. x_train_reshaped = np.reshape(x_train, (60000, 784)) x_test_reshaped = np.reshape(x_test, (10000, 784)) print(\u0026#34;x_train_reshaped_shape\u0026#34;, x_train_reshaped.shape) print(\u0026#34;x_test_reshaped_shape\u0026#34;, x_test_reshaped.shape) x_train_reshaped_shape (60000, 784) x_test_reshaped_shape (10000, 784) Normalização dos a x_mean = np.mean(x_train_reshaped) x_std = np.std(x_train_reshaped) epsilon = 1e-10 x_train_norm = (x_train_reshaped-x_mean) / (x_std + epsilon) x_test_norm = (x_test_reshaped-x_mean) / (x_std + epsilon) 5: Criando o modelo de rede neural. Modelo será composto de uma camada de entrada, uma camada interna oculta e uma camada de saída. model = Sequential([ Dense(56, …","date":1711152000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1711220400,"objectID":"6d6179f9140fcb8ab89a3df010a497ad","permalink":"https://lgrando1.github.io/post/pythoncv/","publishdate":"2024-03-23T00:00:00Z","relpermalink":"/post/pythoncv/","section":"post","summary":"Classificação imagens utilizando rede neurais e Python","tags":["TensorFlow","IA","ML","Imagens","classificação","Python"],"title":"Classificação de imagens com o TensorFlow.","type":"post"},{"authors":[],"categories":[],"content":"2024/02/26 Thinking in a society without centralization and auto-regulated, like the ants and insects societies; Create a way to summarize society’s problems TODO list. Request to everybody to stop talk about politics and start thinking about these problems; Think how to use Artificial Intelligence to improve society care and not only profits. Give a way to person live without need be online. ","date":1708905600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1708960160,"objectID":"27dc9bd42ebab287eca8667eea83805c","permalink":"https://lgrando1.github.io/ideas/","publishdate":"2024-02-26T00:00:00Z","relpermalink":"/ideas/","section":"","summary":"Some ideas to a better world","tags":["ideas"],"title":"Ideas","type":"page"},{"authors":[],"categories":null,"content":"","date":1702387800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1702387800,"objectID":"7d197cf7e9f275a966f656037893aa7f","permalink":"https://lgrando1.github.io/talk/wsc-2023/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/talk/wsc-2023/","section":"event","summary":"Presenting the Extend Abstract of our work \"MODELING AND SIMULATION FOR FARMING DRONE BATTERY RECHARGING\" in the Simulation Around the World (SATW) Track.","tags":["Agent-Based","Simulation","presentation","Drones","Farm"],"title":"WSC 2023","type":"event"},{"authors":["Juan F Galindo Jaramillo","Leonardo Grando","Jose Roberto Emiliano Leite","Edson L. Ursini"],"categories":null,"content":"","date":1702339200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1702339200,"objectID":"bfb66ebafcdfcdbb5446c7ff6a157428","permalink":"https://lgrando1.github.io/publication/jaramillo-2023/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/publication/jaramillo-2023/","section":"publication","summary":"Using Agent-Based Models (ABM) for disease incidence may help decision-making processes. This work shows an ABM for cervical cancer detection. Our results show the relevance of social indicators.","tags":["Cancer","Simulation","Agent-Based","Detection"],"title":"Agent-Based Model For Analysis of Cervical Cancer Detection","type":"publication"},{"authors":["Leonardo Grando","Juan F Galindo Jaramillo","Jose Roberto Emiliano Leite","Edson L. Ursini"],"categories":null,"content":"","date":1702339200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1702339200,"objectID":"742878604d28f8a3e34a0a21b3e871e8","permalink":"https://lgrando1.github.io/publication/grando-2023/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/publication/grando-2023/","section":"publication","summary":"The Connected Farm is composed of several elements that communicate with each other through a 4G/5G Radio Base Station (RBS) placed in the middle of the farm. This RBS is connected to the Internet, allowing communication for all kinds of autonomous devices, performing uninterrupted tasks. This work simulates the Connected Farm environment for an autonomous drone. Our model intends to define when each drone needs to recharge its batteries, with no collusion regarding this recharging decision, reducing the drone’s battery usage due to the absence of this communication.","tags":["Drones","Simulation","Agent-Based","Precision Agriculture"],"title":"Modeling and Simulation for Farming Drone Battery Recharging","type":"publication"},{"authors":[],"categories":[],"content":"Desenvolvimentos dos componentes da Série de Taylor Para expandir computacionalmente é possivel utilizar a função sympy.series.\nA documentação desta função do Sympy pode ser encontrada aqui\nO código fonte deste Jupyter Notebook pode ser encontrado aqui\n# importando as funções nescessarias para a expansão das funções: from sympy import Symbol, cos, series, E, sin, ln, cosh, sinh z = Symbol(\u0026#39;z\u0026#39;) Series de Taylor Utiliza-se a seguinte expressão para o desenvolvimento das expressões das séries de Taylor:\n$f(z)=\\sum_{k=0}^{\\infty}(z-a)^k\\frac{f^{k}(a)}{k!}$\nDesenvolva as séries de Taylor para as funções a seguir nos pontos determinados:\nA) $f(z) = e^z$ para $a = 0$ Calculando as derivadas:\n$f^0(z)=e^z \\Rightarrow f^0(0) = 1$\n$f^1(z)=e^z \\Rightarrow f^1(0) = 1$\n$f^2(z)=e^z \\Rightarrow f^2(0) = 1$\n$f^3(z)=e^z \\Rightarrow f^3(0) = 1$\n$f^4(z)=e^z \\Rightarrow f^4(0) = 1$\nPara k = 0\n$(z-0)^0 \\frac{f^0(0)}{0!} = 1$\nPara k = 1\n$(z-0)^1 \\frac{f^1(0)}{1!} = z$\nPara k = 2\n$(z-0)^2 \\frac{f^2(0)}{2!} = \\frac{z^2}{2!}$\nPara k = 3\n$(z-0)^3 \\frac{f^3(0)}{3!} = \\frac{z^3}{3!}$\nPara k = 4\n$(z-0)^4 \\frac{f^4(0)}{4!} = \\frac{z^4}{4!}$\nEntão:\n$f(z) = 1 + z + \\frac{z^2}{2!} + \\frac{z^3}{3!} + \\frac{z^4}{4!}… $\n#Computacionalmente: series(E**(z),z) $\\displaystyle 1 + z + \\frac{z^{2}}{2} + \\frac{z^{3}}{6} + \\frac{z^{4}}{24} + \\frac{z^{5}}{120} + O\\left(z^{6}\\right)$\nB) $f(z) = \\cos(z)$ para $a = 0$ Calculando as derivadas:\n$f^0(z)=\\cos(z) \\Rightarrow f^0(0) = 1$\n$f^1(z)=-\\sin(z) \\Rightarrow f^1(0) = 0$\n$f^2(z)=-\\cos(z) \\Rightarrow f^2(0) = -1$\n$f^3(z)=\\sin(z) \\Rightarrow f^3(0) = 0$\n$f^4(z)=\\cos(z) \\Rightarrow f^4(0) = 1$\nPara k = 0\n$(z-0)^0 \\frac{f^0(0)}{0!} = 1$\nPara k = 1\n$(z-0)^1 \\frac{f^1(0)}{1!} = 0$\nPara k = 2\n$(z-0)^2 \\frac{f^2(0)}{2!} = -\\frac{z^2}{2!}$\nPara k = 3\n$(z-0)^3 \\frac{f^3(0)}{3!} = 0$\nPara k = 4\n$(z-0)^4 \\frac{f^4(0)}{4!} = -\\frac{z^4}{4!}$\nEntão:\n$f(z) = 1 - \\frac{z^2}{2!} + \\frac{z^4}{4!} … $\n#Computacionalmente: series(cos(z),z) $\\displaystyle 1 - \\frac{z^{2}}{2} + \\frac{z^{4}}{24} + O\\left(z^{6}\\right)$\nC) $f(z) = \\sin(z)$ para $a = 0$ Calculando as derivadas:\n$f^0(z)=\\sin(z) \\Rightarrow f^0(0) = 0$\n$f^1(z)=\\cos(z) \\Rightarrow f^1(0) = 1$\n$f^2(z)=-\\sin(z) \\Rightarrow f^2(0) = 0$\n$f^3(z)=-\\cos(z) \\Rightarrow f^3(0) = -1$\n$f^4(z)=\\sin(z) \\Rightarrow f^4(0) = 0$\n$f^5(z)=\\cos(z) \\Rightarrow f^5(0) = 1$\nPara k = 0\n$(z-0)^0 \\frac{f^0(0)}{0!} = 0$\nPara k = 1\n$(z-0)^1 \\frac{f^1(0)}{1!} = z$\nPara k = 2\n$(z-0)^2 \\frac{f^2(0)}{2!} = 0$\nPara k = 3\n$(z-0)^3 \\frac{f^3(0)}{3!} = -\\frac{z^3}{3!}$\nPara k = 4\n$(z-0)^4 \\frac{f^4(0)}{4!} = 0$\nPara k = 5\n$(z-0)^5 \\frac{f^5(0)}{5!} = \\frac{z^5}{5!}$\nEntão:\n\\box{$f(z) = z - \\frac{z^3}{3!} + \\frac{z^5}{5!} … $\n#Computacionalmente: series(sin(z),z) $\\displaystyle z - \\frac{z^{3}}{6} + \\frac{z^{5}}{120} + O\\left(z^{6}\\right)$\nD) $f(z) = \\frac{1}{z}$ para $a = 1$ Calculando as derivadas:\n$f^0(z)=\\frac{1}{z} \\Rightarrow f^0(1) = 1$\n$f^1(z)=-\\frac{1}{z^2} \\Rightarrow f^1(1) = -1$\n$f^2(z)=\\frac{2}{z^3} \\Rightarrow f^2(1) = 2!$\n$f^3(z)=-\\frac{3!}{z^4} \\Rightarrow f^3(1) = -3!$\n$f^4(z)=\\frac{4!}{z^5} \\Rightarrow f^4(1) = 4!$\nPara k = 0\n$(z-1)^0 \\frac{1}{0!} = 1$\nPara k = 1\n$(z-1)^1 \\frac{-1}{1!} = -(z-1)$\nPara k = 2\n$(z-1)^2 \\frac{2!}{2!} = (z-1)^2$\nPara k = 3\n$(z-1)^3 \\frac{3!}{3!} = -(z-1)^3$\nPara k = 4\n$(z-1)^4 \\frac{4!}{4!} = (z-1)^4$\nEntão:\n$f(z) = 1 -(z-1) + (z-1)^2 - (z-1)^3 + (z-1)^4 … $\n#Computacionalmente: series(1/z, z, 1) $\\displaystyle 2 + \\left(z - 1\\right)^{2} - \\left(z - 1\\right)^{3} + \\left(z - 1\\right)^{4} - \\left(z - 1\\right)^{5} - z + O\\left(\\left(z - 1\\right)^{6}; z\\rightarrow 1\\right)$\nE) $f(z) = \\ln(z)$ para $a = 1$ Calculando as derivadas:\n$f^0(z)= \\ln(z) \\Rightarrow f^0(1) = 0 $\n$f^1(z)=\\frac{1}{z} \\Rightarrow f^1(1) = 1$\n$f^2(z)=-\\frac{1}{z^2} \\Rightarrow f^2(1) = -1$\n$f^3(z)=\\frac{2}{z^3} \\Rightarrow f^3(1) = 2!$\n$f^4(z)=-\\frac{3!}{z^4} \\Rightarrow f^4(1) = -3!$\nPara k = 0\n$(z-1)^0 \\frac{0}{0!} = 0$\nPara k = 1\n$(z-1)^1 \\frac{1}{1!} = (z-1)$\nPara k = 2\n$(z-1)^2 \\frac{-1}{2!} = -\\frac{(z-1)^2}{2}$\nPara k = 3\n$(z-1)^3 \\frac{2!}{3!} = \\frac{(z-1)^3}{3}$\nPara k = 4\n$(z-1)^4 \\frac{3!}{4!} = -\\frac{(z-1)^4}{4}$\nEntão:\n$f(z) = (z-1) -\\frac{(z-1)^2}{2} + \\frac{(z-1)^3}{3} -\\frac{(z-1)^4}{4} … $\n#Computacionalmente: series(ln(z),z, 1) $\\displaystyle -1 - \\frac{\\left(z - 1\\right)^{2}}{2} + \\frac{\\left(z - 1\\right)^{3}}{3} - \\frac{\\left(z - 1\\right)^{4}}{4} + \\frac{\\left(z - 1\\right)^{5}}{5} + z + O\\left(\\left(z - 1\\right)^{6}; z\\rightarrow 1\\right)$\nF) $f(z) = \\cosh(z)$ para $a = 0$ Calculando as derivadas:\n$f^0(z)= \\cosh(z) \\Rightarrow f^0(0) = 1 $\n$f^1(z)= \\sinh(z) \\Rightarrow f^1(0) = 0$\n$f^2(z)= \\cosh(z) \\Rightarrow f^0(0) = 1 $\n$f^3(z)= \\sinh(z) \\Rightarrow f^1(0) = 0$\n$f^4(z)= \\cosh(z) \\Rightarrow f^0(0) = 1 $\nPara k = 0\n$(z-0)^0 \\frac{1}{0!} = 1$\nPara k = 1\n$(z-0)^1 \\frac{0}{1!} = 0$\nPara k = 2\n$(z-0)^2 \\frac{1}{2!} = \\frac{z^2}{2}$\nPara k = 3\n$(z-0)^3 \\frac{0}{3!} = 0$\nPara k = 4\n$(z-0)^4 \\frac{1}{4!} = \\frac{z^2}{4!}$\nEntão:\n$f(z) = 1 + \\frac{z^2}{2} + \\frac{z^4}{4!} … …","date":1700352000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1700420400,"objectID":"d15fba87ee6a9c78cfe2f856904ce216","permalink":"https://lgrando1.github.io/post/complex4/","publishdate":"2023-11-19T00:00:00Z","relpermalink":"/post/complex4/","section":"post","summary":"Expansão tanto algebricamente, quanto utilizando biblioteca Sympy no Python","tags":["Matemática","números","complexos","aprendizagem","Taylor"],"title":"Números Complexos - Pt. 4","type":"post"},{"authors":[],"categories":[],"content":"#importar as bibliotecas import matplotlib.pyplot as plt import numpy as np import cmath plt.rcParams.update({ \u0026#34;text.usetex\u0026#34;: True, \u0026#34;font.family\u0026#34;: \u0026#34;sans-serif\u0026#34;, \u0026#34;font.sans-serif\u0026#34;: \u0026#34;Helvetica\u0026#34;, }) #import sympy from sympy import I, re, im, Abs, arg, conjugate, solve, Symbol, deg, sqrt from sympy import exp, sin, cos, symbols from sympy import exp_polar, pi, I, sqrt # função para plotar o número - Modificado para o Sympy def plotapolar(z): fig, ax = plt.subplots(subplot_kw={\u0026#39;projection\u0026#39;: \u0026#39;polar\u0026#39;}, figsize=(4, 4)) ax.plot(arg(z), abs(z), marker=\u0026#39;o\u0026#39;, markersize=15, color=\u0026#39;red\u0026#39;) ax.quiver(0, 0, float(re(z)), float(im(z)), scale=0.1) plt.show() Lista com exercícios envolvendo números complexos Códigos disponíveis aqui\n1. Expresse $1-\\sqrt{3}i$ na forma polar (faça o gráfico) z = 1-sqrt(3)*I z $\\displaystyle 1 - \\sqrt{3} i$\nabs(z) $\\displaystyle 2$\narg(z) $\\displaystyle - \\frac{\\pi}{3}$\nplotapolar(z) 2. Faça o gráfico de $|z-(1.1+2i)|\u0026lt;0.05$ Expandindo resulta em uma equação da reta,\n$\\sqrt{(x-1.1)^2+(y-2)^2} \u0026lt; 0.05$\nO gráfico abaixo mostra os pontos (pintados) para os pontos solicitados.\n# ponto central do circulo z = 1.1 + 2 theta = np.linspace( 0 , 2 * np.pi , 150 ) #raio do circulo maior, apenas para referencia radius = 0.5 #raio do circulo menor radius1 = 0.05 # Desenhando o circulo maior a = float(re(z)) - radius * np.cos( theta ) b = float(im(z)) - radius * np.sin( theta ) # Desenhando o circulo menor, aberto a1 = float(re(z)) - radius1 * np.cos( theta ) b1 = float(im(z)) - radius1 * np.sin( theta ) # Pintando a area desejada Drawing_colored_circle = plt.Circle(( float(re(z)) , float(im(z)) ), radius1 ) # Plotando a figura: figure, axes = plt.subplots( 1 ) axes.plot( a, b ) axes.plot( a1, b1 , linestyle = \u0026#39;dotted\u0026#39;) axes.add_artist( Drawing_colored_circle ) axes.set_aspect( 1 ) axes.set_xlabel(\u0026#34;Real (z)\u0026#34;) axes.set_ylabel(\u0026#34;Imag (z)\u0026#34;) #para criar a anotação e a seta indicativa axes.annotate(r\u0026#39;$\\varepsilon \u0026lt; 0.05$\u0026#39;, (float(re(z))+0.01, float(im(z))+0.01), xytext=(0.75, 0.6), textcoords=\u0026#39;axes fraction\u0026#39;, arrowprops=dict(facecolor=\u0026#39;black\u0026#39;, shrink=0.05), fontsize=12, horizontalalignment=\u0026#39;right\u0026#39;, verticalalignment=\u0026#39;top\u0026#39;) #plt.title( \u0026#39;Parametric Equation Circle\u0026#39; ) plt.show() 3 - Faça o gráfico de $\\Re(z) \\geq 1$ se $z = x + yi$\nEntão $\\Re(z) = x$ e desta forma seria a área maior e igual a 1.\nSão os pontos ilustrados abaixo:\n# Código apenas para representação: fig, ax = plt.subplots() plt.vlines(x=1, ymin = 0, ymax = 2, color=\u0026#39;r\u0026#39;, linestyle=\u0026#39;solid\u0026#39;) ax.set(xlim=(0, 2), xticks=np.arange(0, 2), ylim=(0, 2), yticks=np.arange(0, 2) ) y = np.array([0, 2]) x1 = np.array([2,2]) x2 = np.array([1,1]) ax.set_xlabel(\u0026#34;Real (z)\u0026#34;) ax.set_ylabel(\u0026#34;Imag (z)\u0026#34;) ax.fill_betweenx(y, x1, x2, where=(x1 \u0026gt; x2), color=\u0026#39;C0\u0026#39;, alpha=0.3) plt.show() 4 - Ache a imagem da linha $Re(z) = 1$ sob o plano $f(z) = z^2$. Onde $f(z)$ dá origem à imagem em $f(w)$. Faça o gráfico $w = f(z) = z^2 = (x+yi)^2 = x^2-y^2+2xyi$\n$u = x^2-y^2$ $v = 2xy$\nComo $\\Re(z) = x$ então neste caso para $x = 1$\nResultando em:\n$v = 2y \\rightarrow \\frac{v}{2}$\n$u = 1-y^2 \\rightarrow 1- \\frac{v^2}{4}$\nplt.figure(figsize = ((12,5))) ax1 = plt.subplot(1,2,1) ax2 = plt.subplot(1,2,2) ax1.vlines(x=1, ymin = -2, ymax = 2, color=\u0026#39;r\u0026#39;, linestyle=\u0026#39;solid\u0026#39;) ax1.set_title(\u0026#34;Plano z\u0026#34;) ax1.set_xlabel(\u0026#34;Real (z)\u0026#34;) ax1.set_ylabel(\u0026#34;Imag (z)\u0026#34;) v = np.arange(-2, 2, 0.01) u = 1 - (v**2)/4 ax2.plot(u,v) ax2.set_title(\u0026#34;Plano w\u0026#34;) ax2.set_xlabel(\u0026#34;Real(w) = u(x,y)\u0026#34;) ax2.set_ylabel(\u0026#34;Imag(w) = v(x,y)\u0026#34;) Text(0, 0.5, \u0026#39;Imag(w) = v(x,y)\u0026#39;) 5. Diferencie: Lembrando:\nSuponha que $f$ e $g$ são diferenciaveis em $z$, e $h$ é diferenciavel em $f(z)$. Sendo $c \\in \\mathbb{C}$\n1 - $(cf)’(z) = cf’(z)$;\n2 - $(f+g)’(z) = f’(z)+g’(z)$;\n3 - Regra do Produto:\n$(f \\cdot g)’(z) = f’(z)g(z)+f(z)g’(z)$;\n4 - Regra do quociente:\n$(\\frac{f}{g})’(z) = \\frac{g(z)f’(z)-f(z)g’(z)}{g(z)^2}$, para $g(z) \\neq 0$;\n5 - Regra da cadeia:\n5 - $(h \\circ f)’(z) = h’(f(z))f’(z)$.\na) $f(z) = 3z^4-5z^3+2z$\nimport sympy x, y, a, b, c, z = sympy.symbols(\u0026#39;x y a b c z\u0026#39;) expr = 3*z**4-5*z**3+2*z expr $\\displaystyle 3 z^{4} - 5 z^{3} + 2 z$\n# Importar o módulo de derivadas from sympy import diff diff(expr,z) $\\displaystyle 12 z^{3} - 15 z^{2} + 2$\nb) $f(z) = \\frac{z^2}{4z+1}$\nPara resolver, não esquecer:\nUtilizar a regra do quociente lembrar que $g(z) \\neq 0$ exp1 = z**2 / (4*z+1) exp1 $\\displaystyle \\frac{z^{2}}{4 z + 1}$\ndiff(exp1,z) $\\displaystyle - \\frac{4 z^{2}}{\\left(4 z + 1\\right)^{2}} + \\frac{2 z}{4 z + 1}$\nPara $z \\neq -\\frac{1}{4}$\n6. Mostre que $f(z) = x + 4iy$ não é diferenciável em nenhum ponto; Forma 1 - Teorema de Cauchy-Reimann\nu = x\ny = 4i\nu = x v = 4*y diff(u,x) == diff(v,y) False diff(u,y) == -diff(v,x) True Forma 2 - Fazendo $\\Delta z = \\Delta x + i \\Delta y$\nPortanto:\n$\\lim_{\\Delta z \\to 0} \\frac{ f(z+\\Delta z)-f(z)}{\\Delta z}$\nResultando em:\n$f(z + \\Delta z) - f(z) = x + \\Delta x + 4i(y+ \\Delta y) - x - 4iy = \\Delta x + 4i \\Delta y$\ne\n$\\lim_{\\Delta z \\to 0}\\frac{\\Delta x + 4i\\Delta y}{\\Delta x + i\\Delta y}$\nQuando $\\Delta z \\to 0$ ao …","date":1699142400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1699210800,"objectID":"04e7252706ebbfb129825c6a8e2a4a5c","permalink":"https://lgrando1.github.io/post/complex3/","publishdate":"2023-11-05T00:00:00Z","relpermalink":"/post/complex3/","section":"post","summary":"Tópico: Operações básicas e derivadas","tags":["Matemática","números","complexos","aprendizagem","exercícios"],"title":"Números Complexos - Pt. 3","type":"post"},{"authors":[],"categories":[],"content":"Pt 2 - Forma Polar/Exponencial/Funções/Cauchy-Riemann A Parte 1 deste série considera as operações com as coordenadas cartesianas;\nOperações Básicas com Números Complexos 1.1 - Utilizando o Python para efetuar os cálculos Representação Polar/Exponencial 2.1 Multiplicação e divisão de números polares 2.2 - Utilizando o Sympy Raízes de z Função complexa Equações de Cauchy-Riemann Código disponível aqui: https://github.com/lgrando1/Notas_Numeros_Complexos/\n1. Operações Básicas com Números Complexos Considere os números complexos abaixo:\na = 2 + 3j\nb = 1j\nc = 4 + 1j\nd = 5 - 2j\nCalcule:\n1a) a+b =\n1b) a+c =\n1c) d-a =\n1d) b-d =\n1e) a * b =\n1f) b * c =\n1g) a / c =\n1h) d / c =\nCalcule do valor absoluto (módulo) dos números complexos:\n1i) |a| =\n1j) |b - d| =\nCalcule o conjugado dos números complexos:\n1l) $\\bar{c}$\n1m) $\\overline{c+b}$\n1.1 - Utilizando o Python para efetuar os cálculos: # Definindo os números a = 2 + 3j b = 1j c = 4 + 1j d = 5 - 2j print(\u0026#34;1a:\u0026#34;, a+b) 1a: (2+4j) print(\u0026#34;1b:\u0026#34;,a+c) 1b: (6+4j) print(\u0026#34;1c:\u0026#34;,d-a) 1c: (3-5j) print(\u0026#34;1d:\u0026#34;,b-d) 1d: (-5+3j) print(\u0026#34;1e:\u0026#34;,a * b) 1e: (-3+2j) print(\u0026#34;1f:\u0026#34;,b * c) 1f: (-1+4j) print(\u0026#34;1g:\u0026#34;,a / c) 1g: (0.6470588235294118+0.5882352941176471j) print(\u0026#34;1h:\u0026#34;,d / c) 1h: (1.0588235294117647-0.7647058823529411j) print(\u0026#34;1i:\u0026#34;,abs(a)) 1i: 3.605551275463989 print(\u0026#34;1j:\u0026#34;,abs(b - d)) 1j: 5.830951894845301 print(\u0026#34;1l:\u0026#34;,c.conjugate()) 1l: (4-1j) print(\u0026#34;1m:\u0026#34;,c.conjugate()+b.conjugate()) 1m: (4-2j) OBS: Sugestões para gráficos em Python: https://python-graph-gallery.com/\nFunção no Python para plotar um número utilizando a biblioteca Matplotlib\n#importar as bibliotecas import matplotlib.pyplot as plt import numpy as np #criando uma função para plotar def plotargant(x): ponto = np.array(x) x = ponto.real y = ponto.imag fig, ax = plt.subplots(1, figsize=(6, 4)) ax.scatter(x, y, s = 100, color = \u0026#39;red\u0026#39;) ax.quiver(0, 0, x,y, units=\u0026#39;xy\u0026#39;, angles=\u0026#39;xy\u0026#39;, scale=1) ax.spines[\u0026#39;left\u0026#39;].set_position(\u0026#39;zero\u0026#39;) ax.spines[\u0026#39;right\u0026#39;].set_color(\u0026#39;none\u0026#39;) ax.spines[\u0026#39;bottom\u0026#39;].set_position(\u0026#39;zero\u0026#39;) ax.spines[\u0026#39;top\u0026#39;].set_color(\u0026#39;none\u0026#39;) ax.set_ylabel(\u0026#39;Im\u0026#39;) ax.set_xlabel(\u0026#39;Re\u0026#39;) #ax.show() print(\u0026#34;Gráfico ponto a\u0026#34;) plotargant(a) Gráfico ponto a print(\u0026#34;Gráfico 1l\u0026#34;) plotargant(c.conjugate()) Gráfico 1l 2. Representação Polar/Exponencial Converta os números a seguir em polar: 2a) a = 2 + 3j\n2b) b = 1j\n2c) c = 4 + 1j\n2d) d = 5 - 2j\nA fórmula de Euler:\n$e^{j\\theta} = \\cos\\theta + j\\sin\\theta$\nPode ser utilizada para representar um número complexo na fórmula polar:\n$z = re^{j\\theta} = r\\cos\\theta+jr\\sin\\theta = r(\\cos\\theta+j\\sin\\theta)$\nLembrando: $|z| = r = \\sqrt{x^2 + y^2} = \\sqrt{z\\bar{z}}$\nO principal argumento do ângulo: $-\\pi \u0026lt; \\theta \u0026lt; \\pi$.\nOutros valores possíveis para $\\theta = \\theta + 2n\\pi$, onde $n = \\pm 1, \\pm 2, …$\nO número complexo $z = 1+1i$ pode ser representado das seguintes formas:\nForma cartesiana: $z = 1+1i$ Forma polar: $\\sqrt{2}(\\cos(\\frac{\\pi}{4}) + i \\sin(\\frac{\\pi}{4}))$ Forma exponencial: $\\sqrt{2}e^{i\\pi/4}$ #definindo os números nos Python: a = 2 + 3j b = 1j c = 4 + 1j d = 5 - 2j #importando a biblioteca cmath (para cálculos dos complexos) import cmath cmath.polar(a) (3.605551275463989, 0.982793723247329) cmath.polar(b) (1.0, 1.5707963267948966) Neste caso (2a) o número 2 + 3j, pode ser representado como o valor\naproximado de r = 3,60 e o argumento de 0,98 radianos ou melhor (56,3 graus).\nUtilizando a notação de Euler:\n$a = 2+3j = 3.6e^{j0.98}=3.6(\\cos{0.98}+j\\sin{0.98})$\nComandos interessantes para o cmath:\n#Para calcular o modulo de a: abs(a) 3.605551275463989 #para obter o valor do angulo Theta: cmath.phase(a) 0.982793723247329 # Importar a biblioteca math (para calcular o arco tangente) import math #que é igual a: math.atan(a.imag/a.real) 0.982793723247329 #convertendo para graus round(math.degrees(cmath.phase(a)), 1) 56.3 # Realizando o caminho inverso # a forma polar para a forma algébrica # r*(cos(theta) + i sen(theta) para # (x+yj) abs(a) * (math.cos(cmath.phase(a)) + math.sin(cmath.phase(a))*1j) (2+3j) # função para plotar o número def plotapolar(z): fig, ax = plt.subplots(subplot_kw={\u0026#39;projection\u0026#39;: \u0026#39;polar\u0026#39;}, figsize=(4, 4)) ax.plot(cmath.phase(z), abs(z), marker=\u0026#39;o\u0026#39;, markersize=15, color=\u0026#39;red\u0026#39;) ax.quiver(0, 0, z.real, z.imag, scale=0.1) plt.show() plotapolar(a) # 2b) b = 1j print(cmath.polar(b)) plotapolar(b) (1.0, 1.5707963267948966) # 2c) c = 4 + 1j print(cmath.polar(c)) plotapolar(c) (4.123105625617661, 0.24497866312686414) #2d) d = 5 - 2j print(cmath.polar(d)) plotapolar(d) (5.385164807134504, -0.3805063771123649) 2.1 Multiplicação e divisão de números polares Sendo:\n$z_1 = r_1(\\cos\\theta_1 + i\\sin \\theta_1)$\n$z_2 = r_2(\\cos\\theta_2 + i\\sin \\theta_2)$\nMultiplicação para a forma polar:\n$z_1z_2= r_1r_2[\\cos(\\theta_1+\\theta_2) + i \\sin((\\theta_1+\\theta_2)]$\nDivisão para a forma polar\n$\\frac{z_1}{z_2}= \\frac{r_1}{r_2}[\\cos(\\theta_1-\\theta_2) + i \\sin((\\theta_1-\\theta_2)]$\nLembrando que:\n$arg(z_1z_2) = arg z_1 + arg z_2$ e\n$arg(\\frac{z_1}{z_2}) = arg z_1 -arg z_2$\nCalcule a multiplicação e divisão …","date":1691712000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1694286000,"objectID":"5c1f24ef5834469f40dcd1da90f6cad9","permalink":"https://lgrando1.github.io/post/complexex1/","publishdate":"2023-08-11T00:00:00Z","relpermalink":"/post/complexex1/","section":"post","summary":"Exercícios operações básicas números complexos","tags":["Matemática","números","complexos","aprendizagem"],"title":"Números Complexos - Pt.2","type":"post"},{"authors":[],"categories":[],"content":"Pt 1 - Introdução Nesta série de postagens, trataremos dos números complexos.\nUtilizaremos o Python como linguagem de programação.\nA Parte 1 deste série considera as operações com as coordenadas cartesianas;\nNúmeros complexos\n1.1 - O módulo de um número complexo\n1.2 - O Conjugado de um Número Complexo\nOperações Básicas\n2.1 - Adição\n2.2 - Subtração\n2.3 - Multiplicação de números complexos\n2.4 - Divisão de números Complexos\nCódigo disponível aqui: https://github.com/lgrando1/Notas_Numeros_Complexos/\n1. Números complexos Elemento de um sistema numérico que contém os números reais e um elemento especifico denominado $i$, chamado de unidade imaginária, e satisfaz a equação $i^2 = -1$.\nPlano Complexo Números complexos são expressões da forma $z = x + iy$ ou $z = x + jy$, onde:\n$x$ é a parte real de $z$ ou $x = Re$ z; $y$ é a parte imaginária de $z$ ou $y = Im$ z. A representação cartesiana de um número complexo $z = 2 + j1$:\nO conjunto de números complexos é chamado de plano complexo cujo simbolo é $\\mathbb{C}$ e pode ser identificada como $\\mathbb{R}^2$.\nOs números reais são um conjunto do plano complexo onde a parte imaginaria é zero.\nConforme a biblioteca utilizada no Python, pode-se representar o elemento $i$ como a letra $j$, no caso da biblioteca cmath para representar a parte imaginaria de um número complexo Já a biblioteca Sympy utilizasse a Letra $I$.\nEntão a o numero $z = 2+3i$ pode ser descrito no Python como:\n#Definindo o número: z = 2 + 3j print(\u0026#34;Representação do número\u0026#34;) print(z) Representação do número (2+3j) print(\u0026#34;Classe de z\u0026#34;) print(type(z)) Classe de z \u0026lt;class \u0026#39;complex\u0026#39;\u0026gt; Um numero complexo pode ser representado por um ponto no plano complexo $\\mathbb{C}$ e o numero $z = 2+3j$ pode ser representado no Python:\nprint(complex(2,3)) (2+3j) print(\u0026#34;Parte real de z\u0026#34;) print(z.real) Parte real de z 2.0 print(\u0026#34;Parte complexa de z\u0026#34;) print(z.imag) Parte complexa de z 3.0 1.1 - O módulo de um número complexo O módulo de um número complexo $z = x + iy$ é a distância entre o ponto $z$ e a origem, utilizando o Teorema de Pitágoras:\n$|z| = \\sqrt{x^2 + y^2}$\nEm Python, pode obter este valor pela função abs(z):\nz = 1+4i\nw = 4+2i\nz = 1+4j w = 4+2j print(f\u0026#34;O módulo de z é: {abs(z)}\u0026#34;) O módulo de z é: 4.123105625617661 print(f\u0026#34;O módulo de w é: {abs(w)}\u0026#34;) O módulo de w é: 4.47213595499958 1.2 - O Conjugado de um Número Complexo O conjugado do número complexo $z = x + iy$ é $\\overline{z} = x - iy$\nPropriedades do conjugado:\n$\\overline{\\overline{z}} = z$\n$\\overline{z+w} = \\bar{z}+\\bar{w}$\n$\\overline{z} = |\\overline{z}|$\n$z\\overline{z} = (x+iy)(x-iy) = x^2+y^2 = |z|²$\n$\\frac{1}{z} = \\frac{\\overline{z}}{z\\overline{z}}= \\frac{\\bar{z}}{|z|²}$\n$|z \\cdot w| = |z|\\cdot|w|$\n$\\overline{(\\frac{z}{w})} = \\frac{\\overline{z}}{\\overline{w}}$, quando $w \\neq 0$\n$|z| = 0$ se e somente se $z = 0$\nPara encontrar os valores Reais e imaginários de z,\npodemos fazer $z = \\overline{z}$ ou $z = -\\overline{z}$, resultando em:\n$Re$ z $= \\frac{z + \\overline{z}}{2}$\n$Im$ z $= \\frac{z - \\overline{z}}{2i}$\nPara obter o conjugado de um número complexo $z$ em Python:\nz = 3+2j print(z.conjugate()) (3-2j) Algumas desigualdades:\n$-|z|\\leq Re$ z $ \\leq |z|$\n$-|z|\\leq Im$ z $ \\leq |z|$\nDesigualdade triangular $|z+w| \\leq |z| + |w|$\nGeneralizando:\n$|z_1+z_2 + … z_n| \\leq |z_1| + |z_2|+ … + |z_n|$\nDesigualdade triangular inversa $|z-w| \\geq |z| - |w|$\n2. Operações Básicas 2.1 - Adição Se $z = x + iy$ e $w = u + iv$, podemos representar z + w como:\n$(x + iy) + (u + iv) = (x+u) + i(y+v)$, onde:\nRe$(z+w)$ = Re $z$ + Re $w$ Im$(z+w)$ = Im $z$ + Im $w$ 2.2 - Subtração Se $z = x + iy$ e $w = u + iv$, podemos representar z - w como:\n$(x + iy) - (u + iv) = (x-u) + i(y-v)$, onde:\nRe $(z-w)$ = Re $z$ - Re $w$ Im $(z-w)$ = Im $z$ - Im $w$ Em Python para z = 1+4i e w = 4+2i\nz = 1+4j w = 4+2j print(f\u0026#34;O valor de z+w é, {z+w}\u0026#34;) print(f\u0026#34;O valor de z-w é, {z-w}\u0026#34;) O valor de z+w é, (5+6j) O valor de z-w é, (-3+2j) 2.3 - Multiplicação de números complexos $(x+iy) \\cdot (u-iv) = (xu-yv)+i(xv+yu) \\in \\mathbb{C}$\nPropriedades:\nAssociativas: $(z_1z_2)z_3 = z_1(z_2z_3)$; Comutativas: $z_1z_2 = z_2z_1$; Distributivas: $z_1(z_2+z_3) = z_1z_2+ z_1z_3)$. Exemplo\na = 2+4j\nb = -7+5j\n$(2+4j) \\cdot (-7+5j) = (2 \\cdot -7 - 5 \\cdot 4) + j(2 \\cdot 5 + 4 \\cdot -7)$\n$= -34-18j$\nEfetuando a multiplicação dos números a, b e c:\na = 2+4j b = -7+5j c = 3+2j print(\u0026#34;a * b = \u0026#34;, a * b) print(\u0026#34;a * c = \u0026#34;, a * c) a * b = (-34-18j) a * c = (-2+16j) Verificando se as propriedades são verdadeiras\n#Propriedades print(\u0026#34;Associativa: (a*b)*c == a*(b*c)\u0026#34;) print((a*b)*c == a*(b*c)) Associativa: (a*b)*c == a*(b*c) True print(\u0026#34;Comutativa: a*b == b*a\u0026#34;) print(a*b == b*a) Comutativa: a*b == b*a True print(\u0026#34;Distributiva: a*(b+c) == a*b + a*c\u0026#34;) print(a*(b+c) == a*b + a*c) Distributiva: a*(b+c) == a*b + a*c True As Potências de $i$:\n$i^0 = 1$\n$i = 0 + 1i$\n$i^2 = (0 + 1i)(0 + 1i) = (0\\cdot0 - 1\\cdot1) + i(0\\cdot1+1\\cdot0) = -1$\n$i^3 = i^2 \\cdot i = -1\\cdot i = -i $\n$i^4 = i^2 \\cdot i^2 = -1\\cdot -1 = 1 $\n$i^5 = i^4 \\cdot i = …","date":1691366400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1694286000,"objectID":"718d6e0a2b0a6ba6585412b1ca109191","permalink":"https://lgrando1.github.io/post/complex1/","publishdate":"2023-08-07T00:00:00Z","relpermalink":"/post/complex1/","section":"post","summary":"O que são números e algumas operações básicas","tags":["Matemática","números","complexos","aprendizagem"],"title":"Números Complexos - Pt. 1","type":"post"},{"authors":[],"categories":[],"content":"A tecnologia e seus avanços são maravilhosos, eu mesmo sou uma pessoa enviesada nesta questão, pois amo a tecnologia, mas isto não tem valor, se não pensarmos em seus efeitos futuros1.\nMeu pedido à todos é:\nNão apenas comemorar os avanços da tecnologia, sem antes pensarmos em como mitigar seus possíveis efeitos negativos na vida das pessoas.\nAcredito que devemos ser conscientes e críticos com os avanços, com o intuito de garantir que todos tenham sua humanidade preservada. Se o efeito for positivo, vamos todos comemorar, agora se o efeito for negativo, vamos pensar melhor.\nAlguns exemplos:\nUma nova I.A possui a capacidade de elaborar relatórios ou realizar atendimentos de forma automatizada -\u0026gt; Como treinar as pessoas que efetuavam este trabalho para novas atividades. Um sistema de veículos autônomo irá substituir os motoristas -\u0026gt; Como treinar as pessoas que efetuavam este trabalho para novas atividades. Você está se aprimorando para entender esta nova tecnologia funciona/trabalha?, você esta atuando como um “motor de inovação” para sua comunidade?, você está mostrando como utilizar está nova tecnologia e suas armadilhas?. etc, etc. Temos que fazer nossa parte, para que todos sejam respeitados no futuro.\nhttps://notbyai.fyi/ Lembrando:É um trabalho em andamento, ideias são sempre bem vindas.\n1 ONLINE, É. N. “Uma nova classe de pessoas deve surgir até 2050: a dos inúteis”. Disponível em: https://epocanegocios.globo.com/Vida/noticia/2018/01/uma-nova-classe-de-pessoas-deve-surgir-ate-2050-dos-inuteis.html.\n‌\nPara comentários e sugestões, clique aqui\nControle de versão: v00 [19/03] - Versão inícial em PT-BR\nTODO: Traduzir para inglês. Pensar mais exemplos\n","date":1679184000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1679238560,"objectID":"f35ed3c73b3b8870e1fd465571ef3d42","permalink":"https://lgrando1.github.io/post/pedido/","publishdate":"2023-03-19T00:00:00Z","relpermalink":"/post/pedido/","section":"post","summary":"Como aproveitar a tecnologia de modo consciente","tags":["tecnology","future of work","AI"],"title":"Apenas um pedido","type":"post"},{"authors":[],"categories":[],"content":"Sugestões (empíricas) para usufruir o melhor da Internet.\ni. Não ofenda o próximo. -\u0026gt; Somos todos irmãos. ii. Sempre utilize sua cognição e lógica -\u0026gt; não acredite em tudo. iii. Faça back-up do que é importante -\u0026gt; Evite ser surpreendido. iv. Nunca utilize a mesma senha em dois lugares distintos -\u0026gt; Evite ser surpreendido (x2). v. Sempre utilize todos os métodos de segurança disponíveis -\u0026gt; Evite ser surpreendido (x3). vi. Gaste pouco (ou não gaste) tempo nas redes sociais -\u0026gt; Leia um livro, converse com seus amigos/família. vii. Cuide de seu dinheiro e de seus dados -\u0026gt; Os seus dados (e seu conhecimento) são seus maiores patrimônios. viii. Sempre prefira o open source -\u0026gt; Tudo que é aberto/auditável acaba sendo mais confiável. ix. Sempre leia os Termos dos serviços (TOS) -\u0026gt; Evite ser surpreendido (x4). x. Você nunca está totalmente seguro -\u0026gt; Sempre se aprimore. Os seus dados (e seu conhecimento) são seus maiores patrimônios (x2). https://notbyai.fyi/ Lembrando:É um trabalho em andamento, idéias são sempre bem vindas.\nPara sugestões\nControle de versão: v00 [18/03/23] - Versão inícial em PT-BR\nTODO: Traduzir para inglês.\n","date":1679097600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1679152160,"objectID":"afd02caf03216c6b1ead225b207b8115","permalink":"https://lgrando1.github.io/post/rules/","publishdate":"2023-03-18T00:00:00Z","relpermalink":"/post/rules/","section":"post","summary":"Algumas lições que aprendi utilizando a tecnologia","tags":["rules","security","data","WIP"],"title":"10 \"Mandamentos\" para os tempos modernos","type":"post"},{"authors":[],"categories":[],"content":"Language post available: PT-BR\nEN\nFollow below a resource list that I use to learn. This post is an organic list.\nFirst, a great thanks to all resources responsible cited in this. Any resource suggestions or corrections, let me know. I wish great learning to you. Total links: 27 1 - Get informed: Links to inform you.\nHacker News 👉 Social news website when users discuss computing and entrepreneurship. The best news is voted Slashdot 👉 News source of technology Awesome Lists 👉 Lists of awesome and interesting topics Telegram Data Science, Programação e Simulação Channel 👉 Telegram channel with Machine Learning, Artificial Intelligence and Simulation news 2 - General Programming Learning: Links about general programming.\nFreeCodeCamp 👉 Several programming courses and certifications. Youtube channel also OsProgramadores 👉 Brazilian Group for new programming learners with challenges and Telegram chat Computacional 👉 Computational Thinking Brazilian portal CT-STEM 👉 Northwestern University Computational STEM tools using Netlogo MIT Scratch 👉 Block type programming language. Great for starters. Possible to create stories, games, and animations. Several tutorials MIT App Inventor 👉 Block type programming language. Several tutorials. Create iPhone and Android apps in the browser and test them on your phone Roadmaps.sh 👉 List of guides to support developers learning Universidade-Livre/Ciencia-da-computacao/ 👉 Brazilian guide to computational science self-learning Save Money: Learn to Code From Home 👉 A blog reader suggestion with a lot of good resources to learn to code STEM Identity Resources for Women and Girls 👉 College Educated STEM resources list for Women and Girls 3 - Machine Learning / Artificial intelligence: Links about Artificial intelligence.\nMachine Learning for Everyone 👉 Great machine learning concepts summary Machine learning for humans 👉 Great machine learning concepts in plain English Kaggle 👉 Machine learning and Data Science portal. With competition, and Courses Data Hackers 👉 Brazilian data science community, with a Slack community R-Bloggers 👉 Blog that brings news and tutorials about R language Kdnuggets 👉 Data Science portal with great information quantity Data Science for Beginners 👉 Microsoft’s Data Science guide for beginners 4 - Books lists: Links about programming books list.\nBig book of R 👉 List of R language books Online Programming Books 👉 Books list several computing areas Green Tea Press 👉 Allen Downey books. Recommended 5 - Data Viz Resources: Links about Data visualization tools.\nData Viz Project 👉 List of Graphs and their characteristics R Graph Gallery 👉 List of charts implemented in R Python Graph Gallery 👉 List of charts implemented in Python https://notbyai.fyi/ ","date":1666483200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1719880748,"objectID":"973a855da5d5b1dd53ba76fa4d475a6e","permalink":"https://lgrando1.github.io/post/learning-resource-links/","publishdate":"2022-10-23T00:00:00Z","relpermalink":"/post/learning-resource-links/","section":"post","summary":"This post is curate some good resources helping new and experienced learners","tags":["Learning","AI","ML","Netlogo"],"title":"Learning Resource Links","type":"post"},{"authors":[],"categories":[],"content":"Post disponível em: PT-BR\nEN\nSegue abaixo uma lista de links que eu utilizo para aprender. Este post é uma lista orgânica\nPrimeiramente, um muito obrigado aos responsáveis pelos sites presentes nesta lista. Em caso de Sugestões de novos recursos ou correções, por favor me informe. Eu desejo grande aprendizado para você. Total de links: 27 1 - Fique informado: Links para te manter informado.\nHacker News 👉 Site em que usuários trazem notícias diversas sobre computação e empreendedorismo. As melhores notícias recebem votos. Slashdot 👉 Fonte de notícias sobre tecnologia Awesome Lists 👉 Conjunto de listas sobre tópicos interessantes Canal do Telegram Data Science, Programação e Simulação 👉 Canal do Telegram com novidades sobre Machine Learning, Inteligência Artificial e Simulação 2 - Aprendizado geral de computação e/ou programação: Links sobre aprendizado em programação em geral.\nFreeCodeCamp 👉 Vários cursos e certificação gratuitas sobre programação. Possui canal no Youtube. OsProgramadores 👉 Grupo Brasileiro voltado para novos programadores, com desafios e suporte via chat do Telegram Computacional 👉 Portal brasileiro sobre Pensamento Computacional e recursos educacionais CT-STEM 👉 Ferramentas computacionais STEM da Universidade de Northwesternutilizando Netlogo MIT Scratch 👉 Linguagem de programação em blocos. Ótima para iniciantes. Possibilidade de criar histórias, jogos e animações. Vários tutoriais. MIT App Inventor 👉 Linguagem de programação em blocos. Vários tutoriais. Crie aplicativos IPhone and Android no seu navegador e teste em seu celular Roadmaps.sh 👉 Lista de guias para suportar o aprendizado de desenvolvedores Universidade-Livre/Ciencia-da-computacao 👉 Guia brasileiro para aprendizado autodidata em ciência da computação Save Money: Learn to Code From Home 👉 Uma sugestão de uma leitora do blog com bons recursos para aprender a programar. STEM Identity Resources for Women and Girls 👉 Recursos do site College Educated para STEM voltado para mulheres. 3 - Aprendizado de máquina / Inteligência artificial: Links sobre Inteligencia Artificial.\nMachine Learning for Everyone 👉 Ótimo resumo para conceitos de aprendizado de máquina. Possui tradução para o português Machine learning for humans 👉 Ótimo resumo para conceitos de aprendizado de máquina em inglês simples Kaggle 👉 Portal com cursos e competição de aprendizado de máquina e ciência de dados Data Hackers 👉 Grupo brasileiro de ciência de dados com uma comunidade no Slack. R-Bloggers 👉 Blog que traz notícias e tutoriais sobre a linguagem R Kdnuggets 👉 Portal de ciência de dados com grande quantidade de informação Data Science for Beginners 👉 Guia da Microsoft para iniciantes em ciência de dados 4 - lista de Livros: Links sobre lista de livros sobre programação.\nBig book of R 👉 Lista com livros que envolvem a linguagem R Online Programming Books 👉 Lista de livros de variados temas da computação Green Tea Press 👉 Livros do autor Allen Downey - Muito recomendado 6 - Recursos para visualização de dados: Links sobre ferramentas para Visualização de dados.\nData Viz Project 👉 Lista de grafícos e suas caracterisiticas R Graph Gallery 👉 Lista de gráficos implementados em R Python Graph Gallery 👉 Lista de gráficos implementados em Python https://notbyai.fyi/ ","date":1666483200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1719880748,"objectID":"9026b7312eb26385a2e4a823dc2c371a","permalink":"https://lgrando1.github.io/post/links-interessantes-aprendizagem/","publishdate":"2022-10-23T00:00:00Z","relpermalink":"/post/links-interessantes-aprendizagem/","section":"post","summary":"Esta publicação contém bons recursos para ajudar aprendizes novos e experientes","tags":["AI","ML","Netlogo","aprendizagem"],"title":"Recursos para aprendizagem","type":"post"},{"authors":[],"categories":null,"content":"","date":1633691100,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1633691100,"objectID":"3a1bd26709cd3c369113342d1d9ccdba","permalink":"https://lgrando1.github.io/talk/panel-discussion-uvm/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/talk/panel-discussion-uvm/","section":"event","summary":"In this panel discussion, I present the work \"Using a classical model to provide insights through Agent-Based Simulation.\" and discussed with other panelists about the current/future state of agent-based simulation.","tags":["Agent-Based","Simulation","presentation"],"title":"Panel Discussion UVM","type":"event"},{"authors":[],"categories":null,"content":"","date":1604494800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1604494800,"objectID":"cf75d18153edf6e0062f6ce000f0e0a4","permalink":"https://lgrando1.github.io/talk/ieemcon-2020/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/talk/ieemcon-2020/","section":"event","summary":"Present the proceeding work \"Drones Swarm Recharging - Modeling using Agent-Based Simulation\" during the 11th IEMCOM. Our paper recieve the Certificate of Best Paper in the Internet of Things category","tags":["Agent-Based","Simulation","presentation"],"title":"IEEMCON 2020","type":"event"},{"authors":["Leonardo Grando","Edson L. Ursini","Paulo S. Martins"],"categories":null,"content":"","date":1604448000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1604448000,"objectID":"2fe1dfe58d524a410b0f8fb6cfc5a789","permalink":"https://lgrando1.github.io/publication/grando-2020/","publishdate":"2020-11-04T00:00:00Z","relpermalink":"/publication/grando-2020/","section":"publication","summary":"This work seeks to address one of the most critical problems of Flying Ad Hoc Networks (FANET), which is the issue of recharging batteries coordination. For recharges to be carried out in the best possible way, the number of load devices (Base Stations) should not be excessively high so as not to burden the network. On the other hand, it is also necessary that when the drones want to recharge, there must always be a source of energy available. For this, we propose internal estimators that provide intelligence to the drones to try to predict the next charger attendance rate. The drones will not have communication with each other to recharge coordination but will continue to communicate concerning other routine activities (note that this communication is not considered in the scope of this model), that is, for recharging the batteries’ coordination, there will be no energy expenditure on communication. The verification of the suitability of the proposal is done through Agent-Based Simulation and the use of three different policies for decision making. This will enable an approach that aims to optimize the operation of the system through a Nash equilibrium.","tags":["Drones","Simulation","Agent-Based","Nash Equilibrium"],"title":"Drones Swarm Recharging: Modeling Using Agent-Based Simulation","type":"publication"},{"authors":["Leonardo Grando"],"categories":null,"content":"","date":1597968000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1597968000,"objectID":"d21765dc3a0890666f87716d16c09db3","permalink":"https://lgrando1.github.io/publication/grando2020a/","publishdate":"2020-08-21T00:00:00Z","relpermalink":"/publication/grando2020a/","section":"publication","summary":"This work seeks to solve one of the most critical problems of the Flying AdHoc (FANET) networks, which is the issue of coordinating the recharging of drones that fly in the form of Swarms. For recharging to be done in the best possible way, it is desirable that the number of charging devices (base stations) did not be excessively high due to the high implementation cost. Conversely, it is also necessary that, when drones want to recharge, they must have a source of energy available. In other words, we search for a balance between the economically viable number of charging stations and the adequate energy supply for the drones when necessary. For this, we propose agents (drones) equipped with internal intelligence, that is, with internal predictors that provide intelligence to attempt to predict the next attendance rate in the charging device and thus be able to decide whether go or not go to the recharging. Ideally, the forecast should be as best as possible. Therefore, the drone should go when it predicts it should go and it shouldn't go when it predicts not to go. The Nash equilibrium usage for this problem is made possible by the modeling via the El Farol Bar Problem (EFBP), which allows the development of this analogy without the collusion of agents in coordinating the simulation of the recharge of this set of drones. In other words, there will be no energy expenditure on communication about the drones' battery recharging coordination, although the communication will continue in the other tasks inherent to the swarm of drones. The verification of the suitability of the proposal is done through Agent-Based Simulation and are used three different policies for the best predictor decision by each drone. This will allow us to verify the performance in the operation of the system through a Nash Equilibrium. In the current state of this analogy is considered that if the drones go to the charging station and it is full, there will be no possible charging because the system is overloaded. This study includes microscopic and macroscopic analysis. Microscopic analysis is the evaluation of the performance of the rewards of each predictor concerning a set of simulation parameters, aiming at a microscopic behavior performance improvement. A macroscopic analysis is the evaluation of the performance of the global service of the system with three types of policies. This latter analysis is used as a basis for evaluating the drone's recharge analogy. In this way, the performance of the best simulation sets for the recharge of drones is evaluated, which allows supplying below the control threshold (attendance below than the number of recharge positions), but which are relatively close to the threshold.","tags":["Drones","Simulation","Agent-Based","Nash Equilibrium"],"title":"Procedimento de recarga de baterias de drones utilizando simulação por agentes e equilíbrio de Nash","type":"publication"},{"authors":["Leonardo Grando"],"categories":null,"content":"","date":1259884800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1259884800,"objectID":"fcc49c55dbec452b09198fd2b2661ae4","permalink":"https://lgrando1.github.io/publication/grando-2009/","publishdate":"2009-12-04T00:00:00Z","relpermalink":"/publication/grando-2009/","section":"publication","summary":"The use of computational tools for the simulation of physical phenomena is increasing, saving time and money in new processes and materials development. This study aims to use the Java tool for developing a program to compute the kinetics of sintering of vitreous material for ceramics manufacturing. Through this process, special glasses are grinded, compacted and sintered, with simultaneous or subsequent particles crystallization. A recent solution for the sintering process of glass by viscous flow, called Cluster Model, considers the effect of surface crystallization of the particles, which limits the densification (pore elimination) of the material, and allows to deal with mixtures of particles of different sizes. We developed a program in JAVA based on the Clusters Model, for calculations of the sintering kinetics of compact particles of glass powder with different particle sizes and concurrent crystallization. Published data for glasses in the systems Al2O3-B2O3-SiO2 and CaO-MgO-SiO2 were used to check the results of the program, expressed as graphs, which repeated with great precision the literature values.","tags":["Glass","Simulation","JAVA","Crystallization"],"title":"Desenvolvimento de um Programa em Java para Cálculo da Cinética de Sinterização de Vidros.","type":"publication"}] \ No newline at end of file diff --git a/index.xml b/index.xml index ee918583..18910105 100644 --- a/index.xml +++ b/index.xml @@ -24,7 +24,35 @@ <p><strong>Repetindo: siga o procedimento de instalação conforme descrito no site deles, não este daqui</strong>.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -fsSL https://ollama.com/install.sh <span class="p">|</span> sh </span></span></code></pre></div><p>O código acima irá baixar o Ollama em sua máquina e rodar o script de instalação. Você pode auditar o script de <a href="https://github.com/ollama/ollama/blob/main/scripts/install.sh" target="_blank" rel="noopener">instalação aqui</a></p> -<p>A minha máquina é um notebook Acer Nitro que adquiri no final de 2020. Ele possui um Core i5 9300H, 16 GB de RAM e uma GPU Nvidia Geforce 1650. O que fica interessante, pois o Ollama reconheceu a GPU.</p> +<p>A minha máquina é um notebook Acer Nitro que adquiri no final de 2020. Ele possui um Core i5 9300H, 16 GB de RAM e uma GPU Nvidia Geforce GTX 1650. O que fica interessante, pois o Ollama reconheceu a GPU.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="infohw" srcset=" + /post/ollama/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e8cff4527c8809eac29d96bc9cf8a763.webp 400w, + /post/ollama/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp 760w, + /post/ollama/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/ollama/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e8cff4527c8809eac29d96bc9cf8a763.webp" + width="626" + height="532" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> <p>Na <a href="https://itsfoss.com/ollama-setup-linux/" target="_blank" rel="noopener">postagem que usei como referência</a> para instalar, o autor descreve que o Notebook dele não possui uma GPU discreta, o que influenciou no desempenho. E o modelo escolhido vai também influenciar.</p> <p>Hora de testar se o Ollama está rodando, num browser digite:</p> <p> diff --git a/post/index.xml b/post/index.xml index 36c59a7e..71c65413 100644 --- a/post/index.xml +++ b/post/index.xml @@ -24,7 +24,35 @@ <p><strong>Repetindo: siga o procedimento de instalação conforme descrito no site deles, não este daqui</strong>.</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">curl -fsSL https://ollama.com/install.sh <span class="p">|</span> sh </span></span></code></pre></div><p>O código acima irá baixar o Ollama em sua máquina e rodar o script de instalação. Você pode auditar o script de <a href="https://github.com/ollama/ollama/blob/main/scripts/install.sh" target="_blank" rel="noopener">instalação aqui</a></p> -<p>A minha máquina é um notebook Acer Nitro que adquiri no final de 2020. Ele possui um Core i5 9300H, 16 GB de RAM e uma GPU Nvidia Geforce 1650. O que fica interessante, pois o Ollama reconheceu a GPU.</p> +<p>A minha máquina é um notebook Acer Nitro que adquiri no final de 2020. Ele possui um Core i5 9300H, 16 GB de RAM e uma GPU Nvidia Geforce GTX 1650. O que fica interessante, pois o Ollama reconheceu a GPU.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="infohw" srcset=" + /post/ollama/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e8cff4527c8809eac29d96bc9cf8a763.webp 400w, + /post/ollama/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp 760w, + /post/ollama/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/ollama/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e8cff4527c8809eac29d96bc9cf8a763.webp" + width="626" + height="532" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> <p>Na <a href="https://itsfoss.com/ollama-setup-linux/" target="_blank" rel="noopener">postagem que usei como referência</a> para instalar, o autor descreve que o Notebook dele não possui uma GPU discreta, o que influenciou no desempenho. E o modelo escolhido vai também influenciar.</p> <p>Hora de testar se o Ollama está rodando, num browser digite:</p> <p> diff --git a/post/ollama/index.html b/post/ollama/index.html index b5a6942e..fbc6e1d4 100644 --- a/post/ollama/index.html +++ b/post/ollama/index.html @@ -866,7 +866,35 @@

Usando uma Ferramenta LLM no Linux de Forma Offline

Repetindo: siga o procedimento de instalação conforme descrito no site deles, não este daqui.

curl -fsSL https://ollama.com/install.sh | sh 
 

O código acima irá baixar o Ollama em sua máquina e rodar o script de instalação. Você pode auditar o script de instalação aqui

-

A minha máquina é um notebook Acer Nitro que adquiri no final de 2020. Ele possui um Core i5 9300H, 16 GB de RAM e uma GPU Nvidia Geforce 1650. O que fica interessante, pois o Ollama reconheceu a GPU.

+

A minha máquina é um notebook Acer Nitro que adquiri no final de 2020. Ele possui um Core i5 9300H, 16 GB de RAM e uma GPU Nvidia Geforce GTX 1650. O que fica interessante, pois o Ollama reconheceu a GPU.

+

+ + + + + + + + + + + + + + + +

+
+
infohw
+
+

Na postagem que usei como referência para instalar, o autor descreve que o Notebook dele não possui uma GPU discreta, o que influenciou no desempenho. E o modelo escolhido vai também influenciar.

Hora de testar se o Ollama está rodando, num browser digite:

diff --git a/post/ollama/neofetch.png b/post/ollama/neofetch.png new file mode 100644 index 0000000000000000000000000000000000000000..19d578216d0a9871ebfb249bb6558b7faef63658 GIT binary patch literal 61989 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 literal 0 HcmV?d00001 diff --git a/post/ollama/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp b/post/ollama/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 0000000000000000000000000000000000000000..08c806cc462f88e17cd6cc2f1307e2c5419494d2 GIT binary patch literal 40508 zcmV)&K#adqNk&FAo&W$>MM6+kP&gnco&W&Q!~vZFDslo80zRcknnt4{BNYq1d@~9} z_BVbUL4aaeLZ|d>aFY_DPYpMNFl8ux7?~|Xx_%{Es>JR)s zs0aCfO!Q z|NYnX-&y`3e&6!z{4c2fYkqm|_pv5P{Kxtq6km8hlm1)VckaLVKQMo>`eXCc{x49E zcK@~Z1^3_e|Kxw!_n`Nm>;LWlqxJ>%W9fhKKgxfQ{i*m@`49Ks=>1&$-~G4z&+q?| zpI{%!Kc|1s{fhR-{|Al#-2d%+0)IaL0slY!5BY!FFO7I7ZU4#sJN+lV|NsB}-wOYFKmYr>e&B!q|E@G*+3jy&`@X}`Z*9AAd)w)h6<^3? zj{Q4Kr?+0qgBKg3}X!rGhiTO8Bd$HLA8C-*dAbJj5p(Qx*IsSMB4}&N`V|0o2SrT-jXbQW5XdWpPg=DHr9S3Lj5|3safdH;TK#I@qIpHF(m7T4z|7l%>ewJDiDJ*QZ}ekZ}u`PDiEZ@zjF z0TSfTqqNo%KElneRUL1nQpAU2T+0Alv^V;It1)_4rJ~^dMUFhYpUbG&|I*&Q^Dm^Y?U_ujsKob7k z72_XfK-bv9y4HnzRu;xF4_5HR_8@Z@gJ+U~RnF_}XWC|x>~r-o{R2Hc7N#X?Ozz!@ zEJAz3@!|2_c7fBc*O4=c0WAO3Vw*}0-kHfVTv&DxJgjJ%kUAIv}P;uxvJhrAP%SYEv?Pdw;4B zUWG)^gD5EG;h-&t)_pEnaL+*fh2j(apdY?qY(aL2Df!Y>b;72LC+^Rf)_}@y1&b

24ub2%>62Eb64Ws_ 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 K000000000s*^Ryc literal 0 HcmV?d00001 diff --git a/post/ollama/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp b/post/ollama/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp new file mode 100644 index 0000000000000000000000000000000000000000..3de590239ccd77a1e799f10d5a7b3823f9c1f377 GIT binary patch literal 40286 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 G0002RdUNFf literal 0 HcmV?d00001 diff --git a/post/ollama/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e8cff4527c8809eac29d96bc9cf8a763.webp b/post/ollama/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e8cff4527c8809eac29d96bc9cf8a763.webp new file mode 100644 index 0000000000000000000000000000000000000000..2f7163420b4051ba5f57972f492c38093e17e438 GIT binary patch literal 17244 zcmV(vKpFw_Nzixk9z3%-3|B&?n{-yp~)=&Ol|Ns7f0l(e<<^TWx!|*}- zIqO~jr}tCfv;1%UuiW4KpCSLZzyJSuegHr1fB*lZ?g9T-|Ns79a1T}gN&gl8N71Lv ze~SN!;s59#ci)-V-fI2jPS^Jx_5R8I7obDA{LlQKKwo42)8D!OKcs(cy@0%i|B>NA z_iy(fw*LS>)PKHz;`N8m`k^0q-LbtZKW|L`8)2`Qt13Dt`UUiUG*ktB2p%UGX*Qs~ z3H^9cDjH$e6&=3*6BlJkE7I>tuT|$eQ{(7KYt2hBu?9XJ%6)iAiMJaykIHqYQ!mR2 zs1xD4J{egM3<5^0uEo_C0=O0fwz4J+9$9x7@f(lt*kyBR&*rTZq!-sYKLIQFir_wv5GlL7w?30V1Nl%?81LZ5Pf1E8# zl9I8tT*(}mgit%P4`3+^w(!oQ#G23Cfx~hh!VVR$F4iyMfo|4DZ|EgKQh=uR1QNhCsAL*5J>@HVzGoaIqhej$0NTB4p$Qe%yx z6R|D2jyfQS_-GSd5xwePA!X0PuFNxWWCCNWg-M-1<&WHVsh>k-OSBg}R)f84u zJERFGn#E3)I*L)o1rJ#l1W{24Qy`*g*df&eY05Ys>q6*&(YBnWvqHUVI4F5`v zgU@_gt=qfjfP{1cL07Bdw>=Qj2s$1x4S^m zVPZ}{3b!89j%t~}5D461cNtbi9iYWxHn#py2?_9UDI+yu#>GJjP30LS658=<)N4F) zA2g$}v>ZPR)Ixt*8aKXHWz0)^FE3ZL)CbvsWuQi}p=2?|u#Bo+5$fbiCiusvuqS^| zfXqsAjhPuQzQ`SLk)Dc(!eHM}*>G6cv3;mL79koo)jSwFM9~MH9iZf&hmJhlA@O`# znrVq95aq~7a_P7=g zHpHJgBVv(BO};2PU@`h+cEa#Sszwp(49jz;_SvT3UyZzz;*FHx?IgsPxUHJn=Z+8o zbH40v8lTfqPYR9VRLNgdNXK6G7`cOQ8I;w`P|ibl&ba3Pqm%E%vMsIr7YVN7Gi(~# z^%IQyG4o^UWE>nae&93KBztHWr|Nf<8X(~XohN8~BjTw9fxXxQ>83`1zHgBEKRyNy zSjDP2Vc=rxp*9)!2tlP1lze!RAwYO*KJDuH>jN63^QyHNBYE=;F5Aedj;^A+sfQk% zOA9KXwJwnBcN=J;y)7U~dfeN%Vgo%s+#!F}d)xE4et>^Xm^B^Ja>62pP4RIJZcUFe z+*e{>aC$7SX@D!`V40(9B8;Gc3@5C8LQlGhC@h$1#&LLs*UvGLrh^+WM_Q*6p$x6+ z)GRJ9X)#?zu)Ck@PQyO8=Gm7s2n1`LbP#ElhZKm|(v_>M5kc9SHnIXeL1j2_lV0_E z@s1|7T*57*cl_;Fqh6$_J2OVsKu4-bGwX}mOcYs}qiCQ2{aZrl;@jK8P~Fu~Wdqk- zJ`So*6Erg<k0iu5UNi6Xf?igDZ|M;)r9S_em*Y+cU z@A<+c|xwA+3bjaJh*Hh*Xv+eK&|lOPJ|Y1i~hSR`1Kr37w`+eOf~^ zqy?1MN7j7VMAEv?wMqZ-m|79jn2v{fT#br;6iyWy$+}j7no?E@wEbH1Y)%cy{T7ab z<1uiEqDiSj5679&K{Pm%B=9x;0rjitX*$r=yMp`F&`q+=>PFECjWs#}L$xA6{uqm-qU( z6`nVeEc0%yqZTk@ zVao5rkiso52K+MI-UVvxtZZuf zMHi9L&kj17K+4J0Y6DuacNi?{Z8$l5AJ z1->_5S-&?TJ0yi+_Vd8z|g79)0uEKG}bNGi2fMUDA0PNg-x9TRE@g z#haF*{7vrC7QZhgI?ITgS5Z(s1QpFH^8lZj2(dspsrIalbjaWMQ=zHh>t%J;sFWES zWs$nDfHO;AVNp`*KDue|XhpChY$e9vr;wYyIlF}E9A*K#4@$}Fs3+1<|*7Px2% zgAmJ(&-s&*m17qF8|JFxdf9GC_WE9WrH4F<@U9(JHw5Y9G*lV&ZeEMog?`rlmM0e6 z^DXo4#tEPMBfSM16hfPGFt7PLnxv3G(p&f3ywKPx>6g*0wl9u|y zRK*q(M}C8n;l_-Dgv~XNU5^aQz)Kr8Y1A7a@0u{tfCTg6LSO!q&0DoCjY%4=Bb6ZQN?(1 zert_`X(%@Wr)I7EemwW>YpZxQ6z-=Y_IMywY-Rekzb1Zj_Ku~kV+Eg8_If_FDMyvH zksdt|uboFS>DBxU5!CTj#&MCkz9xYjUb@2pjF1wBO6TdFVtA;c_XvNfo=N4#lrl;P z^tj;Ys9~D@10a~F!6i}bpO%u;Dz^#Sblc`l;!VR(deHv$`fhuCdw-TDfUsT!23^=YluTzY1EC-h5E}zyMLeLfDE3f zJW#MGXuW$vN_V6%;MTdAkgaIXS|s46gYcDi{+L4y)Kp%*5!E)a6uI!Bb`@cFl zbZJG5YQIwH7Eb=42)2$DueKo%?S#VLciM(COvn@kJ}tR1DVWzRkdnF&c-?L@pJAI1 zc4(dGXsY`W7dwhTv{@CAe_xwZTS&DG2Sxay<3(A)-2x-DF>Wj8J?J|I;D3|h^(_hE zBm`~40>Ef{Un-ELCO^r4>1IaTzY9V5V!+VDYz!Sml(=H3L9ev2()PYr&guoHh)kIs z&IG&(P=qoxo@D$Q6UU=uzApC^nkcahEuXo*&G= zY$lRyizBl;5jTRQV0nkzcUavAHuyzv$>%-f=eOphD&xTRHCLoe)bxM#MQf2pGq|P# zi@=dn;@BE}FW7v@3`qkfpU)2eW-YYjQYgam9*lOVkJC%!PRPp{N&V=E zm@@2fCg7cxZy6MkC&X#XhF?VGo8}8o!2nVdMo@*BHUYy+^lH?BaK4U_R_BK|8Z@$x zo1~4uMjpxxU+TpC_sj|Oe(k-QdchfvA`emcw%RhHA@uz2_V+n)bzLJsK~u3a(zfNk zkt;Tg%8a9z03hGaD8**y^_aqY=(ZBRDE@j-;;PY|o;C{yk)_9E$7;2x7TbL%fc~7A zkarjxGMF10aDDg#>8lK6Q)m4z!E_(BW+ekDivcv4Wltk1{MxBh*Nclh5i`^QtT#2l z5S)f0E4^A?D?(r%8keWz6R?ikr3j>1NvYABZ;%3U{b{Rj-cyBNRX;Q5b0DC!tP4>s z^RlAu+by!ZSx3!OaNi43IHyAUkOB`jvE8XQ$AO~b8xM=i-iJvO6nz+@b9!DkiLFP- zM$l4KY%AcxJBno+<(+3;E;aBmZ?4YOpUjX5nALbQqbQ^qY3S}Ds}#r4kI-Q z2><+u{#TS|!Vjdx-*||03eJ=%?T10tJ7qhA2vrM;hN>0KKz7oij(fdq4Dy6t>$5)ViBbAS{kAm3xDh!pA_gBx15kP{rwVF~2VuRP&1@|EnYzEeRaaMVukKl_wXf#**U2yTVw9|EFcT24Xhu74@|L;392&FZr>K)Dp?W zP7VWRpROu&w|LX;!Vq#Fz8PAFbsMJn%JzF2N)0|G;jnfqjh=J#LJtqkl3>Y!o5J9@ zGtCVD%mAqZ>m_}RyYPhFJ1;DQysA20No$GAiprL)-{iM%?7Tr3=lZqYWU=(*4tvtJ zNKVLASZy5iKXS0`*)BumOR8!h5^Vii+Jj7>03_b} zm%dSCKmJViL3BJ#;;WRNdX0UPSQEcC{&J8iPb?DQ-@rBlHtoOFeFP;an^Ad--=FlG zpT&>pi)|5qg{LKer%7@0s~q=b)qg*b9scz}xg>S&2jjJgAq3?ux# zt7-rM01(A^n3pb5g(%uDkhuhL7WJ8T*R)LwNyoOEG+C`ow%p}?k1wEzzpvGY{fxO8 z#}9IwvpM{^E4l48yD_zt&GHKHewTi;x|Mn~#86vi>#U&FIuAE$b3K*8tK}iF`gJ_z zN09f3nWS}dwZECVmSks{GLi^>VIb+i_&)+%|zt3>{bj6(Z;W* z!6#IYI#7`5%%x=HyDqa~wNP7KM}esoum=n!IaK56PE+une*EkZ4k)dvw^8^xba zFc5{+E`c?}3dU=_FFa@UtzHrB0v}$1)3KKyj{2^~h_M;b*mN4@CD&>ujL; zKU4{>-N*4cmkLDpB@dr{_T+d24Zpr?7k)SRkZi&f`mmV?G%?*zrt5dgL3!Zq&Z2oXF$>oFIhPT2Z`8*cK!?sktf-Zyl*W0g{GaouW|*o@kU# zL-eA&0)Pz0r(vIe>yn{v;P%V@}z0ikd;UstSJ3mX|GTxPV` za`x~5E?UQ+zK3&BjRe5`0VU0^FBH`5u+~+aqKp6`m3)aFKYG*u?Wpi(W~xX-L)3w_ zp0}F7(n^$|*nih(Sb8*&=|D_B+&Gcpy=U zymOSF6<)Tm5ID(+7lLS1OnRN!r@KxH5*<4yWtGqgK>J1cd)_E33&eSJ2*>&j>4u6> z#8AxD=BG3HY^Xv$hLG7Ko+m#K{)UlXmFA;8`s$1=3MgB0Y0hb5QH)C+aQ^Pr9Di&1 zX(eUdD@1aw`Pcjt0-l@Sesue_Rlw)%d*bP~%`3@Lblvbym|iEDuLa(`Eu zhv6dYcZ(bNx7!AqR*$oNugHr_6nQ|11|5uU#@jWAnZLsJcfsgcG*uH*RWdh^S4V74 z>Zm*$q_)V3>aPmWxyDTw19q<|Og9E;nkw?rHM#3Z@`r?@)V5W((|+@yDqb`^SZ}IP zarNalVngOvksdT<2Zl}OORK&QRuR}MOa1F9pq`k8Ku-NB(2k8 zSl(wHC->g?CegTIyZF`6nk;L3`T222#d zeGCns%I>e)lo31Z3UR_Ay!=6WZkTp6}DfvL@X7z@-A z&A`HY$4I$lz6D6yNPvhgUV?VH)u6ui#rixQ`P2>|u9T4|8?qfX{qsMbd13XGEVc0B z#%~|eO-N6j!x}tx&R0fk-IQK2D32%pJJUvQ@;#Y0pZTipxO1H=$u^t!iW2ywzvU{{SD7iIY!WYt@3m9-MZem^1 z2;O*jBl$sX-I^LKr!eKn05JB=dZp0`iCbXYa5apf!Ga5$2&FDn>c7j ze*=hmC5aklnWhJI;d~+h2TFzG2kjcAQ1j&*Z!4N%^t9BizaMBAvEdU%L>p<@KS1YK ze!z$a@N`dNuSkU#+)YnOiDsWhw98|vF?y@^hVF0Nu+MMLfKbKDWI7UpCc0;d3NgZ$ z{*;6Y?igSo4W zZJsHQLYW}LGEdTS;8!@yp0ndN6}WGCXiK!M-EgB8Mvv;5-Fm)*PDh|HHFTgdmwZ@j z8o!w>7E&4g)MozVK=Xbcypw7|srY+@O` zh?i!AcO>(@Oh#xQwmtF(Db=v0KqzwZ(kL?h_b3d|E&$PZSbo8#^#zigI|V&C?ufz% zLaJN3Um+t7{Ys-FQl)>k=j4{hGU;}e|3Zr5eHVc7RFx&`P!hjuoX;6zoFF5_&ua;x`tM^CQO4!15yI;FSGs+iwr z0?^3JguHTSHq6CfZf9BJr$Xh0N2gDhW4rzgRIgjF$3~}(Bs0S`u|k8USj{>5(A8 z(OOF+-)y;#^_h(jFzMk$RJNp~8mev8tI%gZUnvX3Ad`QZcD-+B*tZNl{R8Rbi&-d2^=j|GjBn?dFH9{vd`5&S7E^$ zc$cL|aj=z{Do>=s)-<>|7_h57NT(6$^KY}}oXO>|Q-r98ure9u8Fh{f%lR%zpvg|C z3&^f&by-Wg@KRZYBZPn9Q`!PQg8P;BfFtZ=#aH*|vA~PnhgFR~4AeovQQ+2i&Gyc7=Cy%q!YfD@}^pkZQNR%v~;%+ZsDP&d(l~E<24&jBfCng_nb(HXmWsW!Ywm z(8KwanHA7C%y4zuvP<|{hC}tauk*PvV`eq_HCgpXT>%L6d{A>KwQV`6~;_D@`UOoc4utL6IGLGiE2R1^30C(ST>P zC?~00Z@MV@Z?4<~B>HtxT$Tw^{C)uYpJ^~*C4)FSjRIG6NiOI)TiW-6pi2vSywy2* zsQ)pOBg%-F97OOk?7KEM+S9GUgiNrUbmY_E&s$s)p0b;!Y#DeIVKO~575*5?hq&Tr zVxj<}ZLL-`rYJhbV~!GKYnvpf)NDQjRj*|BRwIuD4NSZlfPKvc3sTzfqD?z1+BlYDqbI7(vnd8YB!T!Va(!kxlSz)yP*AVZ_J*l zQl*Rs(@Pqc1L#3@UV?mV4P1k1q)9IB#=#%otLJJ&>-Eg$1RvN}N!s6CdsGGiio zGG)EA$nqYIZfzfw?9GS!%(Z!*@w*Fec^Fy*SLcfUz^d1=79sIl0ZC-?Q?{2W=IK)B zxaY%PCgztIv0m1uEV7}qr{(;n_iDj>mdc_rgC{UamX)o z95Q;(>BG{WFdK^^vt%c6Y`3}rJoi~N4kM`H0H2DFCqs;AfrX9)si- zhPGRtMX7#JM@xIl;q-SYfPw;NyV)87=Pi})ZhoFWsWzRSdPxa5nu!u+`mQ>{?~`C% zztOPN^RmWs3DrU(kA-Ym&~))Gr=eA_4;`l+yrx8zF)K(raz}qIr3%ihSY!78=b5PR z)*4waRn$40B|ZvLCd<5RRW>f*G??2Z%x7z3L;J1jrpgtm&&HuE|J7db*xJI7Liw_@ ztE{9~svx4+>MSwrrgJ`VH#Q&-GHxM9H(s^D?{zUfuX@xMga((`A8;75f~@{9z+XFe z@KJdn;O&o|+u_0~#(_tuY{LJ-9dC{)VJmDNv4?iRiFU^=o0S+EtzcZS`ZcHlkl0d6 zCOnkx@b$4bfzcwTC}UUfWtgJ?;P)6!wT=|rU)z%x>gPJ`&nLzjt@BX3B+?6v-hS|{ z^SAl&vi8}3-gH35L2^Ty#gH!!Bt>*?u+}%)NcmJ&$9zjZ$Wr$y<6nUz^l_ixde%r? zABh0ncNWQ9lbqrGHsmb(hc5?%Uk@zCJyAr2&APNir3>CIsD$D&u@`3hX|RDmW1%-cMDeKa*NYZZ zlb@yh*Ctcq7Q1-HsJhb`m?8_9oh47zd@u_M$H9Y=PXIkml1sq0KIAM9F-EKV=KhTL z%$d(J9H6hDvIJBItdE>+FwW_=Jhk8qYN{n$g^%no9#zrJRI3vQ?fMq78 z?$lu^n|Z7jZBqjrS4SAh+k@!ME5O!R%s(LQfBz(45ltc*q&AWxcKa}!uXIuHCry8w zH~65D?h0Aaqd0tp=~m5;7f=b_YxB2-*gx74GP2ME;uzpfY*ZLcg16*@siIvFD`(PY zgG~0}SbyHC#T58dabE*DSz*6AozM!(7%S8;)aHT|I5y4--_5deX{7ZPJq0Awx05eV znjGzEG2ZPX*6RP-LAEN4v009(2d$7!-!hWj*wUQdD{+u-JctHp=%Y_Phm$Qq07J45 z&zLm`skhP!2R*THgJXwgdgHbA)zPpMewd%-;_X1sR=SFIdc5_724gaan{oL_%bCz} z>)ad|OCmEjbC{`u%3%R}r^*)RLpyd43KzUP+=F}|^l4JdFDE3a)u9=KWPP?msI{W@ z3bZ!4Z6!L!h6#k6=Jh=b++LO)jleW7V{FMgw=hDk*U(q(t4dP=bTlmPHq(CF>+XO^ z#3B=DTA25@%e7ihAm_+?kw0p1+3&Vl&^Nd=%_PLSYgCuYRWxLfq=`WDAzYqaf|l+{ zxDv2v{Wivbg+yt^(D0l~u}N?QaOg?vAuIbJ>7|q1nz+VJK#uvmaWE*aci@|^g%zf@ zUQL-z!m-3T-^(G6zQ`$Ztz>abI#lx#Q*u@d)*@;_zO5E@5P|WNp*1Z2rKzhm_fuI4 z(dqO`s`ZJsP)IIKd=*0#)6>;ENQ*!{RwgI4iKCN0Y#>apwQJ71r5YMtG49HL_D_^g-sN9fUiOej&XC34?EC~GNdCO z25cT%t1{#TR@OnR1HHPCqRMIS*0lG%5HtzaR!o`xcQU_gFeSW+#nh`RxvE{Gg((2~ z(HQ-0br#|6!{4x!HkWu0o=WIRMIhEa4wf?Q&4rK2yc8IbN|ZU6&0E@O(%z`P-8=fO zxrG%!jS^*Pg>5X|d!9rZTh|RJzGJ7yAj#|vT#=D00SF=P6}uA09oDp0B`EYmSx=zn zX73~8jo()@;?;Ro%i3#XZKUGyjn}Qrp0Lj-PtGB{ErN$d?071T%`)oMhCrxVF9tNN z!C)<&)aT$s2;z>h-uFNU2?Y0}(1?Jfasi33f*N$LH5pzHL%1(26VvG5A2M?{D2z8c ziQha?tV7H%Co7R)ZMIR{@MccV!V^h^Blh7x;dXzE5MigZo#($Uocbt)cs}PJ0BKEP zm4L4Br++IR-Bi7=I(yp02{`eUy6*`D?XS`C4(bM(V()}-YrnP&IJ^*hEw#6B>!rBf ziDOp$oc3%^Id4f+7D@m~YDPHvkEg+sP^vFc3s%Z{grQQNZoB$LAOv3!o5f5A|tCTh&(_j-f5i5kRohD#GxDx zoU_*%HLD++2-FO1!2^UkpVIkO_~N5JkPmcX21sKyTeV9B95ob{mI-4V5w%$dj0PnZlpk-6z<&^!+_hUZgOl=Xn-nhFbpC}PEy7p8{tK{N1PWFMR`k)L3gXQWPc{X zde#+iiKyGHPDs%62f|_3@|0W1rx;q{34A2#eC?SU;=ofE66g>Y-H`9M{Y*Q2GYSvB zh6N76hm39rGMvDHW^J!CRcNdI zF-2ZHT2tydPj4)98X6y-qlqiS;rnZS`$I=-gkI5<-MC5rT_0AYCVN%P3OObs7)1v=l zRx-#a^CWlo%rp~>wz4>?r%|~N%(S0HT9?JH4SW@Nh+LElWfTIO6x~qi@0DJX(vtc9 zY)nO~Inc{y^@x3&%t~3qa-x($KDKkEZ1*QXcsO2j%t~+3mwm4KJL3(G&7K(>!CSP! zKD7|-6@JVMj1#RTGg9(Z#XC4@beqSMAq+P2;rG9$@SXwwi-An*I{;1xnix8Ed41D1 zB|NkPtT{Ax)9Hm(XEoDpDm#K1^$M^#e!D5ZX)QQs9M;x zd~_2a4T(C&f!c_Z{CZ2C23kMm#r#BYxNb9NyE!WW5Tit9>TA1y z<)D24;v@{>)U|nkAHPKD2rBCf+kgNLcmM#|NCHO{tILHE^3D!1a+^~Z|Ej5QsgWQ~ zq5G?y5DI6BZREaj{U|58&iwj62{C(FCXjH4A@3f-@$wCPub&>PC}Rd<*&*s|qa zmM9zmxOaiZlq--u_`6izp&0y!tYX}j_LZwj~Cma)`bF+4>fm@!hH8yC(we?fAN+7kwcQ1OjV`T z(JX8#P4~npPXfM590#+YwF<_MOa9w4Dw|RCSEsZL${Z~JngtX!1BRL`uubkt?F(Gl zJm-3Lv8YgT6hP9!Fb@|wCa-`h*aOI%<;S>QavUn?4Pq~ec-;=`-&(jGB2UHC8B})@v>CM692fQCt0{OUyfa}paZDz+)NdWmx+lVV^N|*~FK9TA<{?2~5n&*)a#j5> zHNP9{wL`jizmot4d9Hu}yD=2(wA9>xJT{=H8$q5W1He{f{}(xPQouFqWQ+1iuMLpM z9fY8wqr~=N$qDX2Qsp8;+95wlv!NmH1OdJcc|>%(9uSxG|G4O?Gh%rcVQ^LhIc%9VzqCK>DRR#uPXq4A}-f_ zx|DA%i1%ohKQ&<-0N4+~+W$PU>ZNP59-R=ezhaPh$Vl}Af1GM!!AWJS6RFnStou1W zO**JVfncwodqjKSBCE`iulNs}Iqa7V7^m3h_gl~r9j0j2!@e6@uuv;0@)r*NSO>dl z4XM#DfHzqHAF+$k@?-M+R8Uj7JOog0ZFDNwT{YnCOm}#UY^Uvw6n2Ibi0$Z$;&Ei# z>L{G$jo6RHfzDKL2dn9n2Wu}RxXDG9)>~g&FB0V^jXFs$yIk-u5}*3jY~U2#LE&{t zuVr2B1D$ERl+r-nrtslAapZhsj9yyT5}~$>!9e=A*tJ*TdQV;|yhsH$MukkXrX~Bs zUg`5$_K^#mJ-l;toNm@6JTRg>@TwI4cZdt_Mri2-A)@M5(gGC4PMoHfd2-RYZphuX z5~VssjKC0G_=JNN!lp0(977LSmvSZDt-=NBw! z0fXM+Xt%ejZgo%T;06*mQc=>2Qv4eW*^ihie>%1i1xt?2T-9EJ$F6b{hx%697OEXF zqXhu+T)V<^eWI4#L_CXmt5i=?<|`Nt#75b=)!)8tvL9gxNjDv;3)!{c2JRdxGF`>rpVpH-F`tct>Z_@@-Hj8(@F@g7CHg9t9@Zhn5v)RT# zYa!mnOz=CHIrfaVc`GI-@yX+TN`R8UrV~G01guP0cOC0^nt11eR7cp@EsLd*p7Cs>P?$OaPVyCl3 zr=xKYV6-@0PgYWAAIOA%_u_2=ofX{vUGG6*IGWZ4r@QSgO2g@sI4ntG@M|eCW9{{-;#6!XqHv=%Ig*Ws!8wc7wOd zwmSrgQn32bCmv(b9Pq)v9C4Ls_|v$?Vzt%s=N%>eUh5%6W9SiUE^#Cl0)`h8OFX&( z==n_Cv#B{OlI%e{=0rGDQQYy>9nVjXujja1C|WOJwav;7S=&>+DssAWSh2j+220-l zeof+E{4=ZpLi%{J>X^aAvKH(#<$E*8IN3|Gdx}Xb@%-$k8QS0k8^hoQV-zBdb2xse zS%wJ=FaQGxU@8853$H?7`7g~;Z*o$^MGBiG^5oaz6@C`5XB}T-E04B8?Exb8g zn>ZOv37W4{5D?p=F#*Ms8|{W4><`I$9PMh|nR3Xyy0+|OwQDHn#GXyU(mg*%H!XIomQA%&HPh0U4X1{se-2rbk4s}=ZGn3LHWtHx zz|?2`pz?Q8JB)U9J*Tm0hYrbv4RTOsBY0JYtrPn#u7}h{1mW5MTEb{mjfISNYLx8J+L&FQ zcey74*B)@P<1YejYIj6{1c+64;ulnw{SwzQUA5ASL%y$sy+Vao7O|$k%jP{CoLk-_ z!%p=99Pa*%|39lUBl;nds5 zYBQ4ibv-L0^}{2>mFn)zKFJ~7$Q?W4TdCpZvAk*pTg59%X9g8imXgl+W=GXJ-XQ^w zw)ov)Ttc9hhhxKq8nF&tTmr>hMQ9~-0Bub13LkJY%bgDx>cCuEBqAC| zyD$I033_jx?E%BjlFqFaR0I?=ZwoOgb4rF%_OzlQn`e$Wd)Pwyj`8AkSXlvfSRBra z+1qloz)>hw$}Q6<7&{5rgY6mJFy2%SM#|0>12C=;wB)n(FA5kSpq3zUzy>N2K2sYLX*ev~3t<3PHPO zYZ>8O)><}HdD$1Gm2K2?!CTmzNM1Hi-=#@6-VMKdvG&R{*r_jBtb*_RNXm##W&RNZ zQ53F#3aU?*pP5*1<4$mK;ACohp9&66Maeso{amS&)&*FZPqL8^mlq8PILX1Ax3EH* z=Sz5DtM2)`NURS|vh|7q!uaN5ROe+?iSy9h1Xu0EH0M=WJyRi;Nqh1?`( zcy^1GSx7hU%}-r!r%~;fgIMh(LIJnQm{=-oqhMRAE0E32wGtX$Ig-WCD7N<*&q&Ay z)>1i`j$l@>?kP923R3(Uqg(#Du-Nw0+;wPEFc9)}{bjcNXa37h-=rat6PSP>!bEm{ zI}7oGXNHfI&URNi{6!fTGoaBN%^4>3VSeDAazjDnK27xhRuSfz*Nwmbl<0iNwwCu4ICDX+zNy z8)lR9K3Bbl%a~R=Ez|4?M1lrR6H4@MI^>p2*~G3~HH5W*rch1#k|stWOt ze#2i@=?xRLSU-U(v;8Wx#2v*DglDT#g(L|c8T6E6x++CtVJ!ka8VKu*yTBsHvqGNo z4^zt<7hw2_Jx)svDHFt0?`Of2hS*FK_yBBP5oN;!_LRgLk)zURgHgH6KMAeID*w!m z43HzfU??Nd9Dc(vWPQAclO;<9RxTdi1_GVX*#7DCcK`87snL#Be7Ui zd0Dv&jw91W9H}1;4C(glKgbjcsWV_d7>VxoIrQvGd5s?(|32y(Y}{1`pH(hC)RHwi z%F$~}JL_MD7j$@H)RM=LdQ(G`ABbvcpO?M(1DmdFwVpWCTLZDLm!`_nL@McNdZW;F1MG`Xzmmr>%** zPzv!F&rCY4xE#@jbQA6F(Y2Vg-WwcC^l4ussq6(m%@rW~s6Ny~8xok(rm~XgTmq2@ zJWxFPmfldR-Zz1rvPsg6r*|%y{K~bK7pFcH%m+8ktePgYa5ijKE^J1N;NzwEh&e)7 zqPih8@j5YT^UwIcwBL)f+j+yq37N1z(&oC@f?5&TC=6&d#W{*!X3{0^P!wf$(}S*3 zHFXXS*Z5vjDrR?68vh;}c%TBqlTD#=g_5apAmtPF1fPVmL%cDT6wYLBbSJA;)hYnm zY#1IA5d@%f%)X)GF?4EuGMzNy4i!G$-d#Qx0kxH$Hg+A<1w=&I)L-aSuQ1qqG}ksF z;Ev5H_F`J!L&WPhfDI!vvWMsTHNn<)!TaPT@r7Fc&GuayzREi-$>Y=i%XV2oR_lb1 ztGh@N1_QLG=I$^sooc;uY~b3Dx4(XO?fTa#k#z;n*?O(wA+|DJE`H#HsWrO^TJ{8WgtpP(y<+nMCM*bJ`Os``+i{ery`&65z{wv{c^gbSm>boKF`~_xfuX_4(we)Bj zB$2c>QV;Z0k9NiQQ~wW1Nju6pq{zCE{6GvoAT>o^U2R-As&~5wE7_qkZU77@zR-3l zw2xrNBa6YPi5Kb&sP{&Yr;dC1Sb#n_K{Z~4Q{2au=rjTT2iRhPaCj5He3VvPm_r9d zf6rt1XeEX{+^osDPjD(B^r;bpeVh7 zP9=OJUq?8K(o-`=g(fI#9ooDN|Mj?wkj6Db$G{G}qE!32xKK8F)Onx;zy!M3QR-da zhOKZapqgGA(0ru7$vOD+YJ*6G{N?3ys(GVJQT=$168^xmtf%xixH#QkJ%^={^9 zR$gR4H>=Mz0AyO3Bx5PwU$$Bp*Z0{)e*ac#U`p6&xM&m$2OhUz%SO=Ad?<16bz`oT zyHmIpLHBE1EOkfn0|&V@^%FM81$YhK`8TAL)SXL!?Vw zq^5cn8^`FDd}kZ$ohcuE5V*69darNDD`SO;&$i?Tz`Pp)0072HrIb_U+z0sqZ|j%y ze}{hv)t__p6}#&WL4 z-C))5AQga*=0N&E8CXX@%+A>+T`9dqgYRG3C6>m``rnRFSGAouN|X1+ExV~M$w^F` z`Nakoj>@*b5vB0$mppdvj~|XQnxT!ATC*JsTK_F#0Y?M4{A{B$Q}!U*bajqtk8;`x zfJ+>qAsIvF^h7vK{i29Q85;H32(b8UJ0W=HtI&_sQP|cF77W$bc&Yn^(w@d|^%s9i zEb$eKd9*hrj-aIhk*O*5=kjC9a{uXV-gLbe#r`LgFw3=&C2zkuww!+L7c5B|000Ed z`)v$iZ~rf_akYmc5Z$b{m4s6D+L8BKaVds$xHFw|+qRZFOp==lygj8gI4_3kg+l4F z>i?4f%4(!{2;?BAo z-2dmlZ4ZC2ywx}02AEMp9?7fo3j&1P10abZXqShN%N*`hju_?cGBg_b!AJz1ls)E?$-%? zO*tfs+^UI|Y4i1bt`5U3M^0&^|5H=ho<SH?N%>Grwg*z<(GdJ93rtxj{+{(Iey zU;qFBQ%HkSCP!7vTOe~nWce22+%SxbBGuyess{*+k9_~1)~Ea@>VH6YSMLrAn6Zbsl)9u+OZaf%!v*(q zysP8iQaOUFu&4~QwdF`lJ2Z{M6#x&7^s)SEh^b8-!)7vbAtdfOej^tizm2sr-@E(o vts`^X91m