Parlament

Parlament

2024. február 6., kedd

Hétköznapi MI

A negyedik ipari forradalom végén, talán az ötödik elején járunk. Kertész Balázs (Panamajack) könyvéből tudom, hogy ipari forradalomnak olyan technológiai paradigmaváltozásokat hívunk, amelyek alapvetően átalakítják a termelést, a gazdasági szerkezetet és magát a társadalmat is. Az első ipari forradalom a gőzgépek korszaka volt, a második az elektromosságé és a belsőégésű motoroké, a harmadik az automatizálásé és az információs technológiáé, a negyedik pedig a digitalizációé és a virtuális valóságé. Talán még a negyedik korszakba tartozik a mesterséges intelligencia, de lehet, hogy ez újabb paradigmaváltást hoz nekünk.

Egy korábbi posztomban már írtam arról, hogy Péterfy Gergely író néhány mesterséges intelligencia által generált fényképpel és hozzá kitalált történettel hogyan tesztelte a Facebook-on követői hiszékenységét. Abban a posztomban aggodalmamnak adtam hangot, hogy az MI által generált hírek, képek és filmek rengetegében egyre nehezebben fogjuk megtalálni a valóságot.

Iand AI oldaláról letöltve
Az MI által generált fényképek lassan önálló művészeti ággá válnak, az MI által létrehozott deep fake filmek ugyanakkora forradalmat hoznak a filmiparban, mint 25-30 éve a CGI (a legutolsó Indiana Jones film első fél órájában az egyik szereplő Harrison Ford mesterséges intelligencia által létrehozott fiatalkori képmása).

A propaganda is egyre gyakrabban használ MI által létrehozott sötét, baljós képeket a mondanivaló hangsúlyozására, íme itt van az Alapjogokért Központ egyik plakátja:


De persze egy műszaki embert igazából az érdekli, hogy neki mi haszna származik a mesterséges intelligenciából. A napokban a cégnél felmerült a kérdés, hogy hogyan dönthető el egy munkapontról (két fizikai mennyiség által meghatározott állapotról, pl. egy turbinánál a teljesítmény és a fordulatszám), hogy egy engedélyezett tartományon belül vagy kívül van-e. Hamar megszületett a matematikai absztrakció, hogy egy síkbeli pontról kell eldönteni, hogy egy sokszögön belül vagy kívül helyezkedik-e el. Nem voltam rest erről megkérdezni a ChatGPT-t. Íme a beszélgetésünk:

Én:
Hogyan lehet eldönteni, hogy egy pont belül vagy kívül helyezkedik-e el egy csúcsai koordinátáival meghatározott síkbeli poligonon?

ChatGPT:
Egy pont helyzetét egy síkbeli poligonon belül vagy kívül lehet eldönteni a következőképpen:

Síkbeli poligon definiálása: Kezdd el a poligont a csúcsai koordinátáival. Fontos, hogy a csúcsokat olyan sorrendben adjuk meg, amely megfelel a poligon éleinek sorrendjének, vagyis az élek összekapcsolásának sorrendjének.

Pont koordinátáinak rögzítése: Vegyük figyelembe azt a pontot, amelynek el kell döntenünk, hogy belül vagy kívül van a poligonon.

Ray casting (sugaras kiválasztás) algoritmus: Az egyik legegyszerűbb módszer a pont helyzetének eldöntésére a sugaras kiválasztás algoritmusa. Ez azt jelenti, hogy húzunk egy egyenes vonalat a vizsgált pontból egy tetszőleges irányba (általában vízszintesen jobbra), és megszámoljuk, hány élt érint vagy metsz.

Érintett élek számolása: Számold meg, hány élt érint vagy metsz a húzott egyenes. Ha a szám páratlan, akkor a pont belül van a poligonon; ha páros, akkor kívül van.

A ray casting algoritmus gyakran használt, mert egyszerű és hatékony. Fontos megjegyezni, hogy a poligon csúcsain és élein végzett összehasonlításoknál figyeljünk a lebegőpontos hibákra, és alkalmazzunk megfelelő kerekítéseket vagy toleranciákat a helyes eredmények eléréséhez.

Én:
Hogyan állapítható meg, hogy két azonos síkban lévő, végpontjai koordinátáival megadott szakasz metszi-e egymást?

ChatGPT:
Két azonos síkban lévő, végpontjai koordinátáival megadott szakasz közötti metszéspont meghatározásához az alábbiakat teheted:

A szakasz egyenes egyenletének felírása: A két végpont koordinátáiból meghatározhatod a szakasz egyenesének egyenletét. A szakasz egyenes egyenletét általában a koordinátageometriai ismeretek segítségével határozhatod meg.

Az egyenesek metszéspontjának keresése: Ha van egy másik szakasz, akkor az egyenesek metszéspontját keresheted. Ehhez az egyenletet össze kell hasonlítanod a másik szakasz egyenesének egyenletével.

Metszéspont meghatározása: Az egyenes egyenleteinek összevetése után meghatározhatod a metszéspontot. Ha a két egyenesnek van közös pontja, akkor a szakaszok metszik egymást. Ellenkező esetben nem metszik egymást.

Ellenőrzés a szakasz végpontjai alapján: Ha csak az egyenesek egyenletét ismered, akkor is ellenőrizheted, hogy a két szakasz metszi-e egymást vagy sem. Ehhez meg kell vizsgálnod, hogy a két szakasz végpontjai közül az egyik egyik oldalon, a másik pedig a másikon helyezkedik-e el az egyenesen.

Fontos, hogy megjegyezd, ez a módszer csak akkor működik, ha mindkét szakasz egyenesek, és egy síkon helyezkednek el. Amennyiben a szakaszok görbéket tartalmaznak, vagy háromdimenziós térben helyezkednek el, a metszéspont meghatározása bonyolultabb lehet, és esetenként numerikus módszereket kell alkalmazni a megoldáshoz.

Én:
Tudsz-e adni C#-ban írt programot a fenti módszer megvalósítására?

ChatGPT:
Természetesen, íme egy egyszerű C# program, amely ellenőrzi két végpontokkal megadott szakasz metszéspontját két egyenes között:
 
using System;

class Program
{
    static void Main(string[] args)
    {
        // Első szakasz végpontjainak koordinátái
        double x1 = 1, y1 = 2;
        double x2 = 4, y2 = 5;

        // Második szakasz végpontjainak koordinátái
        double x3 = 2, y3 = 3;
        double x4 = 5, y4 = 6;

        // Az első szakasz egyenesének egyenlete: y = m1 * x + c1
        double m1 = (y2 - y1) / (x2 - x1);
        double c1 = y1 - m1 * x1;

        // A második szakasz egyenesének egyenlete: y = m2 * x + c2
        double m2 = (y4 - y3) / (x4 - x3);
        double c2 = y3 - m2 * x3;

        // Ellenőrzés, hogy metszik-e egymást az egyenesek
        if (Math.Abs(m1 - m2) > 0.0001) // Ha az egyenesek meredeksége nem egyezik meg
        {
            // Kiszámítjuk a metszéspont x és y koordinátáit
            double intersectionX = (c2 - c1) / (m1 - m2);
            double intersectionY = m1 * intersectionX + c1;

            // Ellenőrizzük, hogy a metszéspont a szakaszokon belül van-e
            if (intersectionX >= Math.Min(x1, x2) && intersectionX <= Math.Max(x1, x2) &&
                intersectionX >= Math.Min(x3, x4) && intersectionX <= Math.Max(x3, x4) &&
                intersectionY >= Math.Min(y1, y2) && intersectionY <= Math.Max(y1, y2) &&
                intersectionY >= Math.Min(y3, y4) && intersectionY <= Math.Max(y3, y4))
            {
                Console.WriteLine($"A szakaszok metszik egymást a pont ({intersectionX}, {intersectionY}).");
            }
            else
            {
                Console.WriteLine("A szakaszok nem metszik egymást.");
            }
        }
        else
        {
            Console.WriteLine("Az egyenesek párhuzamosak, nem metszik egymást.");
        }
    }
}

Ez a program először kiszámítja mindkét szakasz egyenesének egyenletét a megadott végpontok alapján. Ezután ellenőrzi, hogy a két egyenes metszi-e egymást, és ha igen, akkor kiszámítja a metszéspontot és ellenőrzi, hogy az a szakaszokon belül van-e. A program az eredményt a konzolra írja ki.

Azt gondolom, sok gondot le fog venni a vállunkról a mesterséges intelligencia. Csak nehogy a fejünkre nőjön.



Nincsenek megjegyzések:

Megjegyzés küldése