Laden...
R
Richter myCSharp.de - Member
Student Chemnitz Dabei seit 11.06.2006 104 Beiträge
Benutzerbeschreibung

Forenbeiträge von Richter Ingesamt 104 Beiträge

03.07.2011 - 12:05 Uhr

Ich habe eine (in meinen Augen nicht elegante) Lösung gefunden:

ich platziere ein

                while(sock.Available == 0)
                {
                    System.Threading.Thread.Sleep(100);
                }

vor das Recive.

Bitte dennoch um Ideen wie man es besser machen könnte 😃

03.07.2011 - 11:43 Uhr

Hallo!

Ich lausche in meinem Programm einer Art Börsentickerstream. In meinem Fenster starte ich in der button_click(..) die Funktion StartBitcoinchartsTicker(). Diese startet nun in einem neuen Thread die bitcoinchartlistener() funktion die nun in einer Endlosschleife den Stream abhört. Der Thread wird gespeichert als ThreadX

Wenn ich mein Programmfenster schließe und damit das Programm beenden will, dann "lebt" bitcoinchartslistener einfach weiter. Auch ein ThreadX.abort() bringt nichts. in der Receive funktion kommt dieser Befehl sich zu beenden wohl nicht zur ausführung.

Wie kann ich mein Programm vollständig beenden?

Ich habe folgenden Code:


static bool isBitcoinchartsTickerRunning = false; 
        public static System.Threading.Thread StartBitcoinchartsTicker()
        {
            if (isBitcoinchartsTickerRunning == false)
            {
                return run(() => { bitcoinchartlistener(); });
            }
            return null;
        }

        static BitCoinChartsData bitcoinchartlistener()
        {
            Socket sock = null;
            IPHostEntry hostEntry = null;

            hostEntry = Dns.GetHostEntry("bitcoincharts.com");

            // Nutze die Eigenschaft AddressFamily von IPEndPoint um Konflikte zwischen
            // IPv4 und IPv6zu vermeiden. Gehe dazu die Adressliste mit einer Schleife durch.
            foreach (IPAddress address in hostEntry.AddressList)
            {
                IPEndPoint ipo = new IPEndPoint(address, 27007);
                Socket tempSocket = new Socket(ipo.AddressFamily,
                                               SocketType.Stream,
                                               ProtocolType.Tcp);

                tempSocket.Connect(ipo);

                if (tempSocket.Connected)
                {
                    sock = tempSocket;
                    break;
                }
                else
                {
                    continue;
                }
            }


            Byte[] bytesReceived = new Byte[94096];

            // Instanziere ein gültiges Socket Objekt mit den übergebenen Argumenten

            if (sock == null)
            {
                if (OnError != null)
                {OnError("Could not connect to Bitcoinchart-Datastream");}
            }

            isBitcoinchartsTickerRunning=true;

            int bytes = 0;
            // Empfange die Daten und konvertiere sie
            do
            {
                bytes = sock.Receive(bytesReceived, bytesReceived.Length, SocketFlags.None);

                // kovertiere die Byte Daten in einen string
                //page = page + Encoding.ASCII.GetString(bytesReceived, 0, bytes);
                if(OnNewBitcoinchartData!=null)
                {
                    string JSON = Encoding.ASCII.GetString(bytesReceived, 0, bytes);
                    string[] JSONs = JSON.Split(new string[]{"\0"},StringSplitOptions.RemoveEmptyEntries);
                    foreach(string JS in JSONs)
                    {
                        JS.Replace("\0","");
                        OnNewBitcoinchartData(new BitCoinChartsData(JS));
                    }
                }
            } while (bytes > 0);

            // Unterbinde alle weiteren Send() und Receive() Aktivitäten am Socket
            sock.Shutdown(SocketShutdown.Both);
            sock.Close();
            if (OnError != null)
            { OnError("Could not connect to Bitcoinchart-Datastream"); }
            isBitcoinchartsTickerRunning = false;
            return null;
        }
05.08.2010 - 02:14 Uhr

Hallo!

Ich brauche eine Long Zufallszahl! Standardnetrandom gibt leider nur Ints zurück....

Also schaffe ich durch Multplikation ein long. Das erscheind mir aber sehr "teuer"

Geht es irgendwie besser als das:


(((long)int.MaxValue) * LocalRnd.Next()) + LocalRnd.Next()

Ich glaube auch, dass ich nicht den Kompletten Zahlenbereich eines Long abdecke, stimmt das?

24.05.2010 - 23:04 Uhr

Weil das Cool ist! 😉

Ich habe mehrere Kartendecks gleichzeitig, nicht eines an dem Parallel herrum gedoktert wird...ich bin kein bloedie 😉

Das Seedarry entleert sich wenn parallel aus einer Randominstanz Zufallszahlen erzeugt werden. Ich denke es pasiert Folgendermassen:

Thread ruft auf Core 1 rnd.Next() auf. Mitten in der Erzeugung wechselt der Thread von Core 1 auf Core 2 dabei *mysterioese hexenmagie * teil des Seedarrys ist verloren. Wenn das oft genug passiert, ist das Seedarry irgendwann nur noch mit Nullen gefuellt, ergo werden nur noch Nullen zurueck gegeben. Wenn ich viele Randominstanzen habe, verkleiner sich die Gefahr, da diese auch nur eine Begrenzte Lebensdauer haben und nicht so lange leben wie ein Thread!

Das ist alles recht schmutzig, fuer ein Privatprojekt aber ausreichend ;D

Pro Thread konsistent sollte soviel bedeuten, wie alles was im Threat passiert ist save. Besser waere vielleich In thread konsisten...naja nicht wichtig.

Mein Code ist nicht schoen aber dafuer selten 😛

24.05.2010 - 22:14 Uhr

Das äußert sich, indem irgendwann nur noch Nullen zurück gegeben werden. Das Seedarray entleert sich. Man kann nicht einfach hoffen das alles Pro Tread konsistent ist! Denn auch dann gibt es noch Seiteneffekte! Dies ist sogar auf einem Singlecore möglich wenn aus mehreren Threads auf eine Variable zugegriffen wird. Manchmal kommen die Daten dann eben aus dem Cach und manchmal aus dem Ram! Dadurch gehen Updates verloren! ähnliches scheint bei 2 Cores und einem Thread zu passieren. Oder ist dies Unmöglich? ich glaube leider nicht.

Ich benutze die Zufallsgeneratoren um einen Spielkartenstapel für ein Pokerspiel zu simmulieren.

Das ist wohl die Kritiche Stelle:


int CallWin = (from a in ParallelEnumerable.Range(0, Params.SerchStructure[Params.Level]) select WinningOfMove(eMove.Call, GameState.Clone(), this.Clone(), Stats.Clone(), BetterHands.Clone())).Sum();

In WinningOfMove Brauche ich dann jeweils die Zufalszahlen. Sonst ist nichts Nebenläufig

Wie man sieht, nichts Weltbewegendes, alles hat seine eigenen Instanzen.

24.05.2010 - 20:11 Uhr

herbivore, deine Lösung funktionier zumindest bei meinen Tests nicht!
Ich vermute es kommt durch den Prozessorcach zu Unstimmigkeiten, da der Thread unsinniger Weise von Core zu Core springt und alles ein wenig inkonsitent sein kann.

Es braucht also vorsichtshalber trozdem jeweils eigenständige Instanzen um ganz auf Nummer sicher zu gehen. Und wahrscheinlich ist das auf sehr Lange sicht noch immer nicht ganz Sicher...

Ich wünsche mir die 90er mit immer schneller werdenden Singlecores zurück ;D

23.05.2010 - 01:37 Uhr

Ist diese Lösung so relativ Optimal?

 [ThreadStatic]
        static private Random rnd;

        static Random MasterRnd = new Random();         
        public static Random GetGoodRandomMT()
        {
            
            if (rnd == null)
            {
                Console.WriteLine("HAHAHHAHAHAAAA!");
                lock (MasterRnd)
                {
                    rnd = new Random(MasterRnd.Next());
                }
            }
            return new Random(rnd.Next());
         }

Kann man sich irgendwie den Null-check sparen?

Danke für all eure Kompetente Hilfe!

22.05.2010 - 13:25 Uhr

Hallo!

Ich habe einen Code in dem ich viele Zufallsgeneratoren brauche. Und damits schneller läúft ist alles mit Linq Parallelisiert.

Eine Instanz von Random ist ja nun nicht threadsave. Und zu allen übel, wenn man viele Instanzen in kurzer Zeit erstellt, sind sie alle gleich. Meine Lösung für das Problem sieht so aus:

static private Random rnd = new Random();
        static Dictionary<int, Random> PrivatRNDGenerators = new Dictionary<int, Random>();
        
        public static Random GetGoodRandomMT()
        {


            int ID = System.Threading.Thread.CurrentThread.ManagedThreadId;
            if(PrivatRNDGenerators.ContainsKey(ID))
            {
                return PrivatRNDGenerators[ID];
            }
            lock (rnd)
            {
                Console.WriteLine("AHA!");
                PrivatRNDGenerators.Add(ID,new Random(rnd.Next()));
                return PrivatRNDGenerators[ID];
            }
            throw new Exception("KA!");
                //return new Random(rnd.Next());
            //}
        }

Aber obwohl ich schön säuberlich nach threads trenne, gibt es Fehler, das heisst, die Instanzen in dem Dictionery geben nur noch Nullen statt Zufallszahlen zurück.

Woran kann das liegen?

Eine Funktionierende Lösung war:


        static private Random rnd = new Random();
        
        public static Random GetGoodRandomMT()
        {

            lock (rnd)
            {
                return new Random(rnd.Next());
            }
        }

Aber das ist zu langsam, da warten sich die Threads tot...

10.05.2010 - 08:33 Uhr

Wie der Titel schon sagt, warum gibt GetHashCode eines Integerarrays immer etwas anderes zurück, obwohl alle Elemente zweier Arrays gleich sind?

Das hat sicherlich einen Logischen Grund, den ich gerne Verstehen würde!

Bei Strings funktioniert es doch auch! Und das sind ja quasi auch nur CharArrays?

Muss man solchen Lowlevelsachen bei den Standarddatentypen also immer erst Implementieren, wenn man irgend eine Datenstrucktur in einer Hashtable als Key nutzen will?

19.12.2009 - 12:41 Uhr
if(Console.ReadLine()!="DeinPW")
return

27.09.2009 - 16:33 Uhr

Hallo!

Etwas in der Art müsste doch auch sehr Schnell sein!?!


        public struct Pixel
        {
            public byte B;
            public byte G;
            public byte R;
        }

System.Drawing.Imaging.BitmapData bd = bmp.LockBits(new Rectangle(0, 0, bmp.Size.Width, bmp.Size.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            
            int xsize = bmp.Size.Width;
            int ysize = bmp.Size.Height;

            unchecked
            {
                unsafe
                {

                    Pixel* p1 = (Pixel*)bd.Scan0.ToPointer();
                    
                    for (int i = (ysize*xsize); i > 0; i--, p1++)
                    {
                        p1->R= 255-p1->R;
                        p1->G= 255-p1->G;
                        p1->B= 255-p1->B;

                    }

                }
            } 

Vielleicht hat ja jemand lust das zu Benchmarken?
Ich glaube kaum, dass es viel langsamer als die neue Methode ist, dafür aber leider unsave^^

25.08.2009 - 22:06 Uhr

Es gibt eine Implementierung des compact net für Symbian, vielleicht hilft dir das ja auch schon:

http://www.redfivelabs.com/

Für private zwecke glaube kostenlos!

28.07.2009 - 19:55 Uhr

Keine Ahnung. Das sind Midi-Befehle, die die Töne erzeugen. Du kannst sicherlich irgendwo in den Einstellungen deines PCs regeln, wie Midis wiedergegeben werden.

28.07.2009 - 19:01 Uhr

das ist der Debug-Ordner^^

Eigentlich geht es mir um automatische Musikgeneration, wahrscheinlich mit Hilfe von Neuronalen Netzen. Dafür hab ich nur die Grundlagen geschaffen 😃

28.07.2009 - 13:48 Uhr

Hallo!

Anbei mein neuestes Projekt, bei dem ich zur Zeit evaluiere, ob ich mehr Zeit hinein stecken werde.

Probiert es einfach aus.

Wenn euch gefällt, was ihr Hört, drückt eine beliebige Taste, wenn ihr aber die letzte Note verwerfen wollt, drückt "n".

Man hört nun immer wieder die letzten Sechs Noten. Und eine Neue, und muss entscheiden, ob diese Gut dazu passt.

Hat man 30 Noten zusammen, kann man sein Gesammtwerk anhören ;D

Ich finde, es macht Spaß damit Zeit zu verschwenden ;D

06.07.2009 - 18:23 Uhr

Ich danke euch für eure Hilfe!

Ich habe wohl wirklich irgend etwas nicht aktualisiert, bzw etwas war asynchron. Ich hab jedenfalls alles neu gemach und nun gings....die arbeit wars wert^^

05.07.2009 - 14:04 Uhr

verwendetes Datenbanksystem: Compact Database 3.5 (oder so ähnlich^^)

Hallo!

Ich habe folgenden Code der die von VisualStudio 2008 erzeugten Klassen nutzt:


            holecardsTableAdapter holecardsTA = new holecardsTableAdapter();

            listView1.Items.Clear();
            System.Data.DataTableReader DTR=null;
            DTR = holecardsTA.GetAllHands(NamensListe.SelectedItem as string).CreateDataReader(); //ERROR
            while (DTR.Read())
            {
                listView1.Items.Add(DTR.GetString(1));
            }

An der markierten stelle kommt es zu folgendem Fehler:

Einschränkungen konnten nicht aktiviert werden. Mindestens eine Zeile enthält Werte die die Einschränkungen non-null, unique or foreign-key verletzen.

Hinter GetAllHands verbirgt sich das folgende:


SELECT     holecards.holecards
FROM         holecards INNER JOIN
                      spieler ON holecards.id_spieler = spieler.id_spieler
WHERE     (spieler.name = @name)

Ich versteh den Fehler nicht. 😦 Ich wäre für Tipps sehr dankbar. An den zwei Tabellen ist meiner Meinung nach nichts besonderes 😦

Und wenn ich den sql-Code im Querybuilder ausführe funktioniert er !! Das verstehe ich am wenigsten 😦

Hoffe ihr versteht mich und könnt mir helfen. Danke!

13.06.2009 - 14:22 Uhr

Deswegen vergleicht man ja den Abstand der neu Aufgenommenen Punkte auch mit den Restlichen!

13.06.2009 - 12:16 Uhr

Ist doch easy, irgend einen Punkt nehmen, und für jeden anderen Punkt den abstand berechnen. Alle Punkte die Nah genug sind kommen in die Liste Gruppe 1 plus Startpunkt. Nun vergleicht man noch jeden punkt in Gruppe eins mit den anderen, und findet so vielleicht neue Gruppe 1 Punkte.

Wenn nicht macht man Gruppe zwei auf und wählt neuen Zufälligen Punkt aus den verbleibenden. oder alle Punkte sind weg. Dann ist man fertig.

Wenn es nicht um Millionen Punkte geht, dürfte das auch schnell genug sein.

16.05.2009 - 15:25 Uhr

Hach, wunderbar, scheind mein Konzept, noch so dumm zu sein, ein Funken Wahrheit war wohl vielleicht doch dran 😉

Telepolis: Wir denken wie Maschinen (Link korrigiert)

11.04.2009 - 14:36 Uhr

Man kann nicht einfach so eine KI programmieren. Du musst uns schon sagen, welche Aufgaben dein Programm lösen soll! Denn je nach Problem, gibt es unterschiedliche Ansätze!

11.04.2009 - 01:50 Uhr

Ich muss mal dumm Fragen: Kostet das den Besucher etwas?

11.04.2009 - 01:42 Uhr

Das schreit doch nach Go!

Ist sogar ein Forschungsschwerpunkt und nicht so ausgelutscht wie Schach und vier gewinnt!

01.04.2009 - 03:16 Uhr

verwendetes Datenbanksystem: ganz normales Array^^

Hallo!

Manchmal sagt Code mehr als tausend Worte ;D


int[,] test = new int[,] { { 2, 3, 4 }, { 5, 6, 7 } };
            var list = from num in test select num;


Und der passende Fehler:
Error 4 'int[,]' does not contain a definition for 'Select' and the best extension method overload 'System.Linq.Enumerable.Select<TSource,TResult>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,TResult>)' has some invalid arguments
Error 5 Instance argument: cannot convert from 'int[,]' to 'System.Collections.Generic.IEnumerable<int>'

Ich will also mit Hilfe von Linq ein Mehrdim Array in ein eindimensionales Umwandeln. Warum geht das nicht? Wo is mein Denkfehler? Ich dachte man kann mit jedem Typ arbeiten, der IEnum... besitzt?

Danke für eure Hilfe 😃

12.03.2009 - 17:18 Uhr

Nunja, ich entwickle mich (langsam) weiter^^ Früher hatte ich null schimmer, jetzt bin ich schon bei Prolog, eine Technik der 70er??

Wer weiß wo ich in 10 Jahren bin, wenn man bedenkt, dass ich mich doch erst seid 2-3 Jahren damit beschäftige ;D

Cool bleiben ;D

12.03.2009 - 16:41 Uhr

Ja, ich habe auch erwähnt, das man Heuristiken einbauen kann, die das Ganze sehr beschleunigen. Desweiteren steigt die Suchgröße Exponentiel, das ist wahr, aber auch die Rechenkraft steigt Exponentiell!

Früher war zb 4 Gewinnt ein Problem, heute kann man es in ein Paar Stunen durchrechnen.

Die Anzahl, der Probleme die man bis zum Schluss durchrechnen Kann, steigt jeden Tag. Und in 30 Jahren, glaube ich, das schon bedeutende Probleme innerhalb dieses Bereichs sind.

Die Zauberworte sind also Heuristik und Zeit.

Vorstellbar ist auch, das man das Programm zb eine Stunde rechnen lässt, und dann gibt es den Besten Zug aus. Den es bis dahin gefunden hat. Auch zwingt einen Niemand, eine Zielfunktion zu nutzen die nur das Matt bewertet. Man kann auch andere Sachen, wie Figurenwerte benutzen. Dadurch würden differenziertre bewertungen entstehen.

Und wie ich geschrieben habe, soll dieser Problemsolver unbekannte Objekte untersuchen können. Das empfinde ich als lernen und Forschen!

Ja, mir fehlen Grundlagen, aber ich sehe das als Vorteil. Diese Grundlagen kann ich jederzeit noch lernen. Aber jetzt will ich erstmal meine Eigenen Fehler machen ;D

12.03.2009 - 16:11 Uhr

Oh ja, eine sehr hilfreiche Aussage...

Von außen betrachtet würde das System Intelligent agieren, wo ist dein Problem?

12.03.2009 - 15:42 Uhr

Soo, ich habe meine Ideen mal Skiziert.

Man sieht es ist nicht unmöglich und gibt es wahrscheinlich in Ähnlicher Form schon...

Es ist in einer pdf unter folgendem Link zu bestaunen:

##Ich will es nicht mehr veröffentlichen, da es mir Peinlich ist ;D

Ich bin gespannt, was ihr denkt!

Freundliche Grüße!

11.03.2009 - 16:57 Uhr

Entschuldigt alle bitte! Ich sehe manchmal sehr schnell rot. Soziale Intelligenz fehlt mir vielleicht wirklich etwas. Ich mag es nicht wenn sich jemand rein hängt, der gar keine Ahnung hat. Manchmal ist schweigen doch Gold! In jeder Hinsicht!

11.03.2009 - 15:51 Uhr

Ok, ist mir jetzt zu blöd, bei dir ist null, null vorwissen, da kann ich auch mit dem angesprochenen Granitblock reden...sicherlich haben nicht alle einen begrenzten Horizont in diesem Themenbereich aber du schon....

Vielleicht hat das Hirn nur 14 Hz aber dafür quasi mindestens 10^9 Prozessoren! Es ist jedenfalls, immernoch 100 Mal leistungsfähiger als der Scnellste Supercomputer der Welt...

Belies dich etwas im Internet, und dann komm mit Argumenten. Ein Computer kann nämlich zb sehr wohl lernen. Mit neuronalen netzen, reinforcment lernin usw...

Wer nicht mal eine Rennspiel ki hinbekommt, sollte vielleicht auch nicht hier rummäckern....

11.03.2009 - 15:34 Uhr

Aha..

Und wenn man nun ein Gehirn Atom für Atom Simuliert, das könnte dann auch nie Intelligent werden? Warum nicht?

Von den Wissenschaftlern ist ja die Hälfte schon Tot! Es ging mir eher um Aktuell forschende!

Im übrigen ist das KI Problem schon gelöst, leider nicht anwendbar: AIXI

Danach Googeln, oder hier ein pdf dazu: http://www.hutter1.net/ai/aixigentle.pdf

Kurz gesagt, Simuliert es die ganze Welt, und versucht unendlich Viele Lösungen und nimmt die beste, und wendet sie in der realen Welt an! Das Verhalten ist dann Intelligent. Aber das braucht unendlich viel Rechenleistung...aber es gilt als Beweiß, das KI möglich ist. Man muss es quasie noch etwas Optimieren ;D

11.03.2009 - 15:00 Uhr

Du bist selbst der Beweiß...du bist Intelligent, nun müssen wir es auf einen Computer Übertragen, wie vom Vogel auf das Flugzeug. Der vergleich ist einfach nur perfekt!

Das seht ihr einfach falsch! Es beschäftigen sich leider viel zu wenige damit! Den die Meisten denken leider wie ihr, und versuchen es daher gar nicht erst, sondern konzentrieren sich auf sehr eingegrenzte Probleme. Fußball, Prognosen usw. Man bekommt einfach kaum Forschungsgelder, da es lange dauert, bis man ergebnisse sieht. Also, wenn es soviele Wissenschaftler gibt, die an soetwas arbeiten, dann listet mir doch wenigstens mal 5 auf...

Es ist ein irglaube, dass da viel geforscht wird. Leider...

Daher ist es nicht unmöglich da etwas zu erreichen! Ich habe schon ein Konzept im Kopf, ich werde es zu Papier bringen, und dann könnt ihr es gemeinsam zerreisen ;D

11.03.2009 - 14:47 Uhr

Es gab Zeiten, da war der Wunsch zu fliegen, wie auf Granit zu beißen...und wo sind wir jetzt, dank der ganzen belächelten Flugpioniere? Die haben viele Bruchlandungen gemacht, vor den ersten Erfolgen!

11.03.2009 - 13:37 Uhr

Ach, herrlich, da springt mir doch glatt die Klinge auf, wenn ich dein Posting lese, Herr Admin....

Nur weil es die letzten Jahrzehnte Schief ging, wird es auch in Zukunft garantiert nichts?? Im Gegenteil, bei jedem Fehlschlag steigt die Wahrscheinlichkeit, dass der nächste Versuch gelingt.

Wobei mir sicherlich jeder zustimmen wird, ist dass es meine Erfolgschancen verringert, wenn unentwegt kurzsichtige Menschen sagen, es wird eh nichts! Hört bitte auf die Leute zu sabotieren, die sich an das scheinbar unmögliche wagen, den die bringen uns unter Umständen mit großen Schritten weiter!

Ich bin auch nicht bei Null, ich weiß, dass auf kurz oder lang das Problem von KI gelöst wird.

Denn ob ein Computer aus Proteinen oder Silicium aufgebaut ist, dürfte egal sein.

Es ist nur so, das alle erwarten, mit einem Spielzeugauto, einen Rennwagen zu besiegen. Das Gehirn ist der Rennwagen...

Sobald Computer so schnell sind wie das Gehirn, ist es auch viel leichter beeindruckende Ergebnisse zu erzielen! Und dafür will ich vorbereitet sein.

Den alles in allem, muss man nur eine gigantiche Suche auf dem Zustandsraum der Umwelt machen. Dafür sind derzeitige Computer einfach zu langsam. Sie scheitern schon an Go...

Ihr habt einfach alle einen zu begrenzten Horizont...

Danke für die Aufmerksamkeit! 😃

06.03.2009 - 11:55 Uhr

Hallihallo!

Ich baste zur Zeit an einem Vier gewinnt, dass ich so stark machen will, wie es nur geht. Und zur Zeit, bin ich dabei, einen Hash einzubauen!

Nun überlege ich, wie ich den Hashkey aus dem Spielfeld machen könnte.

es ist ein 7*6 Feld aus int (also new int[7,6]) mit -1=rot, 1=grün und 0=leer

Mein Aktueller naiver langsamer Ansatz ist dieser:


static uint[] Prims = new uint[] { 8849, 8861, 8863, 8867, 8887, 8893, 8923, 8929, 8933, 8941, 8951, 8963, 8969, 8971, 8999, 9001, 9007, 9011, 9013, 9029, 9041, 9043, 9049, 9059, 9067, 9091, 9103, 9109, 9127, 9133, 9137, 9151, 9157, 9161, 9173, 9181, 9187, 9199, 9203, 9209, 9221, 9227, 9239, 9241, 9257, 9277, 9281, 9283, 9293, 9311, 9319, 9323, 9337, 9341, 9343, 9349, 9371, 9377, 9391, 9397, 9403, 9413, 9419, 9421, 9431, 9433, 9437, 9439, 9461, 9463, 9467, 9473, 9479, 9491, 9497, 9511, 9521, 9533, 9539, 9547, 9551, 9587, 9601, 9613, 9619, 9623, 9629, 9631, 9643, 9649, 9661, 9677, 9679, 9689, 9697, 9719, 9721, 9733, 9739, 9743, 9749, 9767, 9769, 9781, 9787, 9791, 9803, 9811, 9817, 9829, 9833, 9839, 9851, 9857, 9859, 9871, };
        public ulong GetHashCode(uint Seed)
        {
            ulong Hash = Seed;
            uint index = 0;
            for (int x = 0; x < Contend.GetLength(0); x++)
            {
                for (int y = 0; y < Contend.GetLength(1); y++)
                {
                    index++;
                    unchecked { Hash = (Hash + ((ulong)(Contend[x, y] * Prims[index]))) * Prims[index]; }
                }
            }
            return Hash;
        }

Ich denke aber, ihr Profis habt etwas besseres!

Danke für jede Idee und Inpiration!

19.02.2009 - 19:33 Uhr

Danke!

Es steckt bestimmt eine höhere Logik dahinter, schade das sie sich mir nicht erschließt^^ Naja Hauptsache es geht!

19.02.2009 - 11:39 Uhr

Ja ein gekipptes Quadrat, keine Raute, kein Parallelogramm oder sonst ein verzerrtes Viereck. 😃

19.02.2009 - 11:20 Uhr

Entschuldigt das ich weiter mit solchem Anfängerzeug nerve, aber ich bekomme es trotz MSDN usw nicht hin 😦


Graphics G = Graphics.FromImage(MyScreen);
            G.FillRectangle(Brushes.White, 0, 0, 300, 300);
            G.RotateTransform(45);
            G.FillRectangle(Brushes.Black, position.X-5, position.Y-5, 10, 10);

Das rotiert das Quadrat um 45 Grad, aber leider um den 0,0 Koordinatenursprung. Es wird also auch "verschoben" da der Drehpunkt nicht in der Mitte des Quadrats ist.


Graphics G = Graphics.FromImage(MyScreen);
            G.FillRectangle(Brushes.White, 0, 0, 300, 300);
            G.Transform.RotateAt(45,new PointF(position.X,position.Y));
            G.FillRectangle(Brushes.Black, position.X-5, position.Y-5, 10, 10);

Bei dieser Variante könnte man meinen es wird um den Mittelpunkt des Quadrats gedreht, aber es passiert gar nichts, zumindest sehe ich nichts 😦

Ich hoffe ihr könnt mir den entscheidenden Tipp geben 😃

19.02.2009 - 00:10 Uhr

Nun, aber da drehe ich doch das ganze Bild, ich will aber verschieden sehr gekippte Quadrate zeichnen. Oder sehe ich den Wald nur vor lauter Bäumen nicht.


Graphics G = Graphics.FromImage(MyScreen);
G.FillRectangle(Brushes.Black, position.X-5, position.Y-5, 10, 10); ///Soll 30 Grad gedreht sein

G.FillRectangle(Brushes.Black, position.X+5, position.Y+5, 10, 10); ///Soll 15 Grad gedreht sein


Wenn ihr diesen Code bitte entsprechend Modifiziert, wäre ich euch sehr dankbar!

18.02.2009 - 23:35 Uhr

Hallo, wie könnte ich ein schräges, also gekipptes Quadrat zeichnen? Geht das irgendwie mit Graphics oder muss ich das "selber" machen mit Hilfe von Polygonen?

.DrawRectangle kann man leider keinen Winkel übergeben 😦

Danke !

10.02.2009 - 16:48 Uhr

Super, danke!

Entschuldigt die Anfängerfrage!

10.02.2009 - 16:22 Uhr

Hallo,
ich habe ein simples Problem, für das ich aber trotzdem keine elegante Lösung weiß.

Ich baue mir einen Pfad zu einer Datei unter Windows ungefähr so hier:


System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)+@"\file.txt"

Unter Linux mäckert er natürlich über das "&quot; da dort ein "/" standard ist. Gibt es eine Art Systemabhängiges Trennzeichenkonstatending, wie es bei Enviroment.NewLine zb der fall ist?

Oder wie könnte ich sonst, alles möglichst ohne große Klimmzüge auf beiden Platformen Lauffähig halten?

Ich hoffe ihr versteht mein Problem. Danke!

08.02.2009 - 19:42 Uhr

Hm, Promovieren kann ich doch Frühestens in 3 Jahren...bis dahin kann ich es doch wirklich auf eigene Faust probieren, Ideen sammeln, mir anschauen was andere machen und Mitstreiter suchen.

Außerdem habe ich es doch schon eingegrenzt auf einen Intelligenten Spielebot. Noch einfacher möchte ich es nicht machen.

08.02.2009 - 11:20 Uhr

Ich kenne vorallem diese beiden Foren. Aber kannst du mir mal erklären, wie ich sonst nach Fähigen Leuten suchen soll? Sie auf der Straße anquatschen? Falls dies wirklich gegen die Regeln verstößt, dann löscht es hier bitte, und entschuldigt!

07.02.2009 - 19:37 Uhr

Nein^^ Tut mir leid, aber Pokerbots haben einen rellen wirtschaftlichen Geldwert.

Ich kann dir ja mal seine Leistungen vorführen, und du kannst dir dann überlegen, ob dir der Code etwas Geld wert ist! Oder du hättest meinen Vortrag besucht, den ich über den Pokerbot an meiner Uni gehalten habe ;D Aber auch da hab ich dem Prof verboten meine Folien zu veröffentlichen. Ich bin ein wenig Paranoid und nicht unbedingt in allen Fällen ein Opensourcer....

07.02.2009 - 19:24 Uhr

Ich vergesse es ganz bestimmt nicht!

Die Idee eine KI zu schreiben, kam mir nicht erst gestern!

Ich habe zb in meinem Pokerbot schon viele dieser Grundlagen angewendet von denen du sprachst. Künstliche Neuronale Netze, effiziente Suchalgorithmen und planen.

Ich weiß ich wirke wie ein Idiot, mit vollkommen Weltfremden Ideen, aber nur weil du keinen Schimmer hast wie man es machen könnte, ist es nicht Unmöglich!

Auch habe ich Vorlesungen über KI an meiner Universität besucht, und sogar verstanden. Leider gibt es keine Lesungen über Generelle KI...

Neuronale Netze an sich sind jedoch eher eine Sackgasse. Besser sind Semantiche Netze, und Agenten die aus diesen Wissen ziehen und Schlussfolgerungen.

Also, nimm dich etwas zurück mit deinen Kontraproduktiven "Das wird eh nichts" Damit hilfst du niemandem....

07.02.2009 - 18:20 Uhr

Ganz genau!

Am Ende soll die KI forschen können, und sich selber verbessern. Eine SeedAI also.

07.02.2009 - 17:54 Uhr

[EDIT=herbivore]Im Verlauf des Threads bestehen sehr unterschiedliche Ansichten über die Realisierbarkeit des Projektes, weil die Beteiligten den Begriff der "allgemeine künstliche Intelligenz" unterschiedliche interpretieren. Erst als Richter ein konkretes Konzept vorstellt, was genau er realisieren will, klärt sich das Missverständnis. Deshalb entsteht ein falsches Bild, wenn man den Thread nicht bis zu Ende liest.[/EDIT]

Hallo!

Und zwar, juckt es mich schon lange in den Fingern eine allgemeine künstliche Intelligenz zu schreiben!
Bisher habe ich mich nur in engen Aufgabenbereichen bewegt. Also zum Beispiel eine Poker-KI geschreiben, die das Pokern selber erlernt. Aber nun möchte ich einen Schritt weiter gehen!

Wie dieser Schritt aussieht? Ich habe keine Ahnung! Ich weiß nur, diesen Schritt kann ich unmöglich alleine gehen!
Deswegen suche ich Mitstreiter! Ich habe leider kaum Konzepte, ich habe nur gemerkt, das viele andere, die es versuchen, den Fehler machen, das Rad zum Teil neu zu erfinden und versuchen, sich alleine durch zu schlagen.
Diese Fehler will ich nicht machen, deswegen, wird benutzt und angepasst, was es schon gibt. Dazu hat man den Codereuse ja erfunden ;D

Mein Projekt möchte ich tatsächlich der Welt später kostenfei zur verfügung stellen, da ich ja so am meisten davon profitieren könnte, und ich für dieses Projekt ja auch die Hilfe der ganzen Welt brauche.

Die ersten Monate geht es also darum Konzepte zu entwickeln, zu lesen und sich Kurz zu schließen. Andere Projekte zu analysieren und Lehren zu ziehen.

Also hat hier jemand Idee, Konzepte und will mitmachen? Oder kennt jemand jemanden der jemanden kennt, der Interesse haben könnte? 😉

Kontakt auch mögich über
ICQ:281036092
MSN: marcel_richter2@yahoo.de
E-Mail: richterthepok(ädd)yahoo(dotter)de

Es wäre doch schön, wenn man ein schlechtes gewissen haben muss, den Computer aus zu schalten, weil er Intelligent geworden ist.

Tschakka! Gemeinsam können wir das schaffen 😉

19.01.2009 - 22:12 Uhr

Ein WriteLine wird immer bis zum ende ausgeführt, wenn ich mich nicht sehr irre! Das meinte ich mit den internen Locken, danach kann ein anderer Thread schreiben, das ist wahr!